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,类别将被保存两次。我试过关掉before_save,它只保存一次。所以我猜想all?(&:save)before_save分别保存了这个数组两次。

我怎样才能避免额外的节省?我需要在对象被保存之前做一些事情,我想知道这些对象在播种时是否被保存。怎么样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 回答