覆盖Rails中的主键保护

时间:2009-12-05 19:04:46

标签: ruby-on-rails

有没有办法在Rails中模型的主键上覆盖质量分配保护? 我的seed.rb数据因此而无法加载。

更新

我发现在模型中包含以下代码会删除保护

def attributes_protected_by_default
  default = super
  default.delete self.class.primary_key
  default
end

不理想

4 个答案:

答案 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填充数据库,但是种子不是那种经常需要优化运行的操作。