0

私は自分のアプリを起動するためにseed.rbを使用しています。

#seeds.rb, create categories and see if they are saved or not 
categories = Category.create([{name:'name1'},{name:'name2'}, {name: 'name3'} ])
if categories.all?(&:save)
  puts "categories saved"
else
  puts "categories saved failed"
end

カテゴリ モデルには次 before_Save :get_external_resources のようなものがあります。つまり、nokogiri を使用してサイト外の何かを取得できます。

問題は、 を実行するrake db:seedと、カテゴリが 2 回保存されることです。をオフにしようとしましたがbefore_save、一度しか保存されません。だから私はそれを推測しall?(&:save)before_saveこの配列を別々に2回保存しました。

どうすれば余分な節約を避けることができますか? オブジェクトが保存される前に何かをする必要があり、シード時にこれらのオブジェクトが保存されているかどうかを知りたいです。どうafter_createですか?メソッドを追加する必要があると思いますがself.save、検証の問題が発生する可能性がありますか?

4

1 に答える 1

0

.create と .save は両方ともレコードを保存し、それぞれが before_save コールバックをトリガーします。(.create で保存したくない場合は、次のように変更します。Category.new

一度だけ実行したい場合はget_external_resources、次のいずれかを実行できます。

  1. に変更しますbefore_save :get_external_resources, on: :create
  2. get_external_resourcesを一度だけ実行するように変更します
于 2013-07-21T12:57:29.873 に答える