Ruby on rails 在Rails中重写主键保护
在Rails中,有没有办法超越模型主键的质量分配保护? 因此无法加载我的seed.rb数据 更新 我发现在模型中包含以下代码会移除保护Ruby on rails 在Rails中重写主键保护,ruby-on-rails,Ruby On Rails,在Rails中,有没有办法超越模型主键的质量分配保护? 因此无法加载我的seed.rb数据 更新 我发现在模型中包含以下代码会移除保护 def attributes_protected_by_default default = super default.delete self.class.primary_key default end 不理想使用属性直接赋值。您还可以利用块 Model.create! do |m| m.id = 27 m.attribute = "foo
def attributes_protected_by_default
default = super
default.delete self.class.primary_key
default
end
不理想使用属性直接赋值。您还可以利用块
Model.create! do |m|
m.id = 27
m.attribute = "foo"
end
很少需要直接触摸外键,例如
post = Post.create :title => "Lorem ipsum", :text => "dolor sit amet…"
comment = Comment.create :text => "Etiam mi mi, imperdiet a tempus suscipit…"
comment.post = post
为了播种而取消大规模分配保护是不明智的。Weppos建议使用直接分配,您对此表示:
不适合尝试创建大量记录的种子数据 使用直接赋值有什么不同?您可以迭代数组或数据散列,并用直接赋值填充它,就像将散列传递给构造函数一样简单。你并没有真的在存钱
另一种方法是直接使用原始SQL填充数据库,但种子设定并不是需要频繁运行的操作,因此必须对其进行优化。我使用的是rails 3.1,上面的答案都不适用于我(使用传统的db模式) 不过,这是可行的:
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
类别
不适用于尝试创建大量记录的种子数据。我在种子和测试中都使用FactoryGirl插件。它使用上述技术绕过任何质量分配限制。很好。。。我花了好几个小时才发现这一点。“为了播种而取消大规模分配保护是不明智的。”-是的,但当你想这么做时,它应该足够不可知,让你这么做。我忽略了对散列的迭代。Apols.但是当你需要的时候,你需要。只是看到了OP更新,这可能适用于rails 3.1没有检查