有没有办法在Rails中模型的主键上覆盖质量分配保护? 我的seed.rb数据因此而无法加载。
更新
我发现在模型中包含以下代码会删除保护
def attributes_protected_by_default
default = super
default.delete self.class.primary_key
default
end
不理想
答案 0 :(得分:3)
使用属性直接分配。你也可以利用积木。
Model.create! do |m|
m.id = 27
m.attribute = "foo"
end
答案 1 :(得分:1)
我正在使用rails 3.1,并且上述答案都不适用于我(使用旧版数据库架构)。
但这有效:
class ActiveRecord::Base
def self.no_pk_protection!
# yikes
default_scope :order => primary_key # this is necessary so first and last don't fail
attr_accessor :mock_pk
set_primary_key :mock_pk
end
end
......然后:
class Category < ActiveRecord::Base
no_pk_protection!
end
答案 2 :(得分:-1)
很少需要直接触摸外键,例如
post = Post.create :title => "Lorem ipsum", :text => "dolor sit amet…"
comment = Comment.create :text => "Etiam mi mi, imperdiet a tempus suscipit…"
comment.post = post
答案 3 :(得分:-1)
为了播种而去除质量分配保护,简单地说,是不明智的。 Weppos建议使用直接分配,你说:
对于您尝试创建大量记录的种子数据并不理想。
使用直接分配如何有所作为?您可以使用直接赋值迭代数组或数据哈希,就像将哈希传递给构造函数一样容易。你真的没有保存任何东西。
另一种方法是直接使用原始SQL填充数据库,但是种子不是那种经常需要优化运行的操作。