0

私が正しい最善の解決策は、以下のように書くことです。

生産開始前

if Category.count == 0 categories = Category.create([{ name: 'business' }, { name: 'sport' }) end

if Category.count == 0
  categories = Category.create([{ name: 'business' }, { name: 'sport' })
elsif Category.count == 2
  Category.create([{ name: 'science' }])
  categories = Category.all
end

[{ name: 'hoge' }]データを追加するたびに書き込む必要があるため、これはちょっと失敗です。Category.count === COUNTそして、ブロック内にあるものを数え逃す可能性がありelsifます。

より良い解決策はありますか?

特定の配列に値を追加/削除して、マスターデータを更新できるといいと思います。

4

2 に答える 2

0

私は、seed_fuのようなものを使用してシード データを管理することを好みます。また、デプロイごとにシードを実行する rake タスクも追加します。

于 2012-10-31T14:02:12.870 に答える
0

データの配列で find_or_create を使用します。

category_data = [
  { name: 'business' },
  { name: 'sport' }
]

category_data.each do |d|
  Category.find_or_create_by(d)
end

編集:申し訳ありませんが、それはRails 4の構文でした...

category_data.each do |d|
  Category.where(d).first_or_create()
end
于 2012-10-31T14:06:25.953 に答える