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 }
上面的命令没有正确替换bars.foo_id,oldFoo.bars的引用被删除并被设置为foo.bars。
我该如何正确地做到这一点?
答案 0 :(得分:0)
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"))
。