在Rails中复制ActiveRecord,使用现有参数发出创建新对象的问题

时间:2012-05-16 03:06:47

标签: ruby-on-rails ruby

我正在尝试在我的应用程序中复制Rails中的资源,并遇到了一些问题。

设置是:我有一个用户可以使用的“项目模板”库,然后修改结果项。我目前有这样的设置:

@temp_item = @template_item.dup
@new_item = @user.items.create(@temp_item.attributes)

然而,我遇到了一个问题,即它试图复制受保护的属性(即created_at和updated_at)。我不想单独列出每个属性,所以我的问题是,是否有办法排除在此实例中复制的属性?

感谢。

3 个答案:

答案 0 :(得分:7)

将Mischa的好建议纳入我的原始答案。

@temp_item_attributes = @template_item.attributes.reject{ |k,v|
  %w(created_at updated_at).include?(k)
}
@new_item = @user.items.create(@temp_item_attributes)

答案 1 :(得分:4)

我同意Mark使用reject,但不是使用case / when,而是执行此操作:

@template_item.attributes.reject{ |k,v| %w(created_at updated_at).include?(k) }

答案 2 :(得分:2)

在我看来,你应该把Mark Paine和Mischa的答案结合起来,即:

temp_item_attributes = @template_item.attributes.reject do |k,v|
  %w(created_at updated_at).include?(k)
end
@new_item = @user.items.create(temp_item_attributes)

我无法相信这种行为没有方便的方法;我看起来并不太难,但没找到一个。