ActiveRecord如何从哈希设置关联属性?

时间:2017-05-22 21:25:14

标签: ruby-on-rails ruby activerecord

我有一个ActiveRecord模型实例,我想修改关联中存在某些属性的属性,而不是直接在模型本身上。所有属性都以哈希形式出现。

此代码是我的测试套件的一部分,所以我不关心在这种情况下大规模属性分配的问题。

如果我尝试使用instance.update_attributes(hash)进行更新,则会失败。

作为替代方案,我尝试循环遍历哈希并设置这样的属性。

hash.each do |key, val|
  instance[key] = val
end

此方法将设置直接存在于实例上的属性,但会对与关联记录关联的属性引发异常ActiveModel::MissingAttributeError Exception: can't write unknown attribute 'foo'

1 个答案:

答案 0 :(得分:1)

delegate方法一试。有点像:

android:visibility="visible"

然后,在控制台中:

  class Foo
    attr_accessor :bar, :foo_attribute
    delegate :bar_attribute=, to: :bar

    def initialize
      @bar = Bar.new
    end
  end

  class Bar
    attr_accessor :bar_attribute
  end