在rails上复制旧对象属性ruby

时间:2012-10-11 11:17:43

标签: ruby-on-rails object activerecord clone

您希望复制旧对象的少数属性并创建具有少量更改属性的新对象。我使用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}))

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

需要帮助......谢谢......

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

一个混乱的解决方案是将attr_accessible :user_id添加到您的模型中,虽然不建议这样做,因为它会使您的应用程序容易受到Mass Assignment的攻击。<​​/ p>

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