0

您好想复制旧对象的一些属性并创建具有很少更改属性的新对象。我使用的是 rails 3.0.7 版,因此我无法使用 old_object.dup。我不想使用 old_object.clone 因为它给了我记录的浅表副本,包括复制冻结状态。因此我遵循以下方法

@old_product = Product.find(params[:id])

@product = Product.create(@old_product.attributes.merge({:description => params[:product][:description], :category => params[:product][:box_id], :user_id => current_user.id}))

但它给了我错误用户不能为空。事实上,它也没有存储我的描述和类别。这是正确的方法吗?复制旧对象属性并更改其中一些属性的任何其他方法。

4

3 回答 3

0

你最好不要设置attr_accessible :user_id. 这将是您系统中的一个漏洞,任何人都可以通过批量分配来更改该值。而是在此代码中手动分配它或使用一些克隆功能并更改其他属性。

于 2012-10-11T12:01:47.273 回答
0

我明白了...在产品模型中:user_id现在已添加到atr_accessible中。最初我无法访问该属性,因此它不会更新或更改 new_object 中的该属性。现在它工作正常。

于 2012-10-11T11:44:00.893 回答
0

一个混乱的解决方案将添加attr_accessible :user_id到您的模型中,尽管不建议这样做,因为它会使您的应用程序容易受到 Mass Assignment 的利用。

如果您打算在开发中使用它一段时间,那很好。

于 2012-10-11T16:13:20.807 回答