【问题标题】:How to clone a has_many association如何克隆 has_many 关联
【发布时间】:2012-06-26 21:33:12
【问题描述】:
class Bar < ActiveRecord::Base
  belongs_to :foo
end

class Foo < ActiveRecord::Base
  has_many :bars
end

Foo oldFoo = Foo.new

Foo foo = Foo.new
foo.bars << oldFoo.bars.all.collect { |bar| bar.clone }

上述命令没有正确替换 bar.foo_id,oldFoo.bars 的引用被删除并设置为 foo.bars。

我应该如何正确地做到这一点?

【问题讨论】:

    标签: ruby clone


    【解决方案1】:
    foo.bars << oldFoo.bars.all.collect { |bar| Bar.new(bar.attributes) }
    

    但在 R3.2 中,受保护的属性分配会引发错误。

    更新:

    看起来和clone一样,所以也好不了多少。如果你定义这样的方法(我经常使用它们):

    class Hash
     def select_at(*s_keys)
        Hash[s_keys.zip(values_at(*s_keys))]
      end
    
      def reject_at(*r_keys)
        select_at(keys - r_keys)
      end
    end
    

    你可以写Bar.new(bar.attributes.reject_at("id", "foo_id"))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-06
      • 2012-02-19
      • 1970-01-01
      • 2014-04-26
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      相关资源
      最近更新 更多