我正在使用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
时,类别将被保存两次。
我尝试关闭before_save
,它只保存一次。所以我猜all?(&:save)
和before_save
已经两次单独保存了这个数组。
如何避免额外储蓄?
我需要在对象被保存之前做一些事情,并且我想知道这些对象在播种时是否被保存。 after_create
怎么样?我想我需要在方法中添加self.save
并且可能有一些验证问题?
答案 0 :(得分:0)
好吧,.create和.save都会保存记录,每个都会触发before_save回调。 (如果您不想.create保存,请更改为Category.new
如果您希望get_external_resources
只执行一次,则可以执行以下操作之一:
before_save :get_external_resources, on: :create
get_external_resources
更改为仅运行一次