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

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

Parent

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

Post
+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)
I was hoping to not have to recreate all my test users and posts again. Is there a less-destructive ...
Monica Cellio‭ wrote 6 months ago

I was hoping to not have to recreate all my test users and posts again. Is there a less-destructive way than dropping the whole DB? Or a way to export or script creation of communities, users, etc? Thanks. (I was hoping there was a "replace" option to seed, or an analogous command -- guess not. Oh well.)

ArtOfCode‭ wrote 6 months ago

Not that I know of. If it's only a few records that you don't need any more, I'd just use the Rails console to delete those specifically.

Monica Cellio‭ wrote 6 months ago

Sounds good. How would I use the Rails console to delete flag reasons (the specific case that prompted this question)?

ArtOfCode‭ wrote 6 months ago

If you know the ID: FlagReason.find(id).destroy