1

当我执行 Model.create 方法时,如果我为 :id 指定一个值,它稍后会被取消。例子:

Model.create (
  :id => 50,
  :name => Joe,
  :enabled => yes
)

相反,我要做的是使用 .new 并将其存储在类变量中,通过类变量存储我的 id 值,然后最后调用保存:

m = Model.new (
  :name => Joe,
  :enabled => yes
)

m.id = 50
m.save

我正在尝试在seeds.rb 中执行此代码,这不是很干的代码。我怎样才能更好地做到这一点并取得相同的结果?

4

2 回答 2

2

id 只是 attr_protected。为防止这种情况,您可以覆盖默认受保护属性的列表。在属性信息可能来自外部的任何地方都要小心。id 字段默认受保护是有原因的。

class Model < ActiveRecord::Base
   private
   def attributes_protected_by_default
      []
   end
end

或与@Leo 一起回答

于 2012-06-28T14:34:31.313 回答
1

这可能是你的答案。Model.create 基本上是 Model.new 后跟 Model.save ,因为您正在更改 id 并再次保存,您不妨这样做

m = Model.new { 
  :name => Joe,
  :enabled => yes
}
m.id = 50
m.save!

这将使您免于进行两次保存。

于 2012-06-28T14:28:58.337 回答