Rails:`before_save`干扰`save?`

时间:2013-07-21 12:51:56

标签: ruby-on-rails ruby before-save

我正在使用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并且可能有一些验证问题?

1 个答案:

答案 0 :(得分:0)

好吧,.create和.save都会保存记录,每个都会触发before_save回调。 (如果您不想.create保存,请更改为Category.new

如果您希望get_external_resources只执行一次,则可以执行以下操作之一:

  1. 将其更改为before_save :get_external_resources, on: :create
  2. get_external_resources更改为仅运行一次