3

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

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

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

但是我遇到了一个问题,它也试图跨受保护的属性进行复制(即 created_at 和 updated_at)。我宁愿不单独列出每个属性,所以我的问题是,有没有办法排除在这种情况下被复制的属性?

谢谢。

4

3 回答 3

7

将米沙的好建议融入我的原始答案。

@temp_item_attributes = @template_item.attributes.reject{ |k,v|
  %w(created_at updated_at).include?(k)
}
@new_item = @user.items.create(@temp_item_attributes)
于 2012-05-16T03:44:50.633 回答
4

我同意 Mark 的 using ,但我不reject使用case/ ,而是这样做:when

@template_item.attributes.reject{ |k,v| %w(created_at updated_at).include?(k) }
于 2012-05-16T04:06:02.963 回答
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)

我不敢相信这种行为没有方便的方法;我没有仔细看,但没有找到。

于 2012-05-16T04:47:58.310 回答