Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

How do I force db:seed to forget previous context and load only what is in the flags YAML file? Question

+1
−0

In my dev environment I'm editing the flags in db/seeds/post_flag_types.yml. After editing I run rails db:seed, which adds my new flag. Fine so far.

However, I had a typo in the name, so I edited to fix it, ran rails db:seed again, and now I have two flags. Running seeds added flags it didn't already know about, but didn't detect the absence of a previously-defined flag and remove it.

I understand why that's desirable as a default; we wouldn't want to nuke flags that have actually been used without considering the effects on flag history. But in this case, I want to override -- I want to tell db:seed to forget what it knows and load these flags anew.

How do I do that? I found UPDATE_POSTS=true rails db:seed in a section about updating the seeded help and that doesn't sound like it would apply, but I tried it anyway. As expected, it didn't replace the flag seeds.

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.
Why should this post be closed?

0 comment threads

2 answers

+2
−0

This is the difference between refreshing the database and seeding the database.

db:seed does what it says on the tin - seeds the database. That means it adds pre-defined data to the database. It doesn't care about what's already there - to the extent that if you don't have appropriate constraints set up, it'll add the same data every time, regardless of if it already exists or not.

If you want a completely clear database with only a set of fresh seeds in it, drop the database first:

rails db:drop
rails db:create
rails db:schema:load
rails db:seed

If you just have one mistaken seed in there that needs removing, db:seed won't do that because that's not what it's meant for - you'll need to remove the erroneous entry manually, either via Rails console or via SQL.

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

1 comment thread

I was hoping to not have to recreate all my test users and posts again. Is there a less-destructive ... (4 comments)
+1
−0

As this answer says, db:seed isn't the right tool here.

Short of dropping the entire database as suggested in that answer, you can delete individual flags in the database. From the mysql console, get the IDs of the flags you want to remove:

SELECT id, name FROM post_flag_types;

And then delete the ones you don't want, for example:

DELETE FROM post_flag_types WHERE id=24;

Thanks ArtOfCode for the coaching.

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

0 comment threads

Sign up to answer this question »