您希望复制旧对象的少数属性并创建具有少量更改属性的新对象。我使用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}))
但它给了我错误用户不能为空。实际上它也不存储我的描述和类别。这是正确的方法吗?任何其他方式来复制旧对象的属性并更改其中的一些..
需要帮助......谢谢......
答案 0 :(得分:0)
我明白了......产品型号:user_id 现已添加到 atr_accessible 中。最初我无法访问该属性,因此它没有在new_object中更新或更改该属性。 现在它工作正常。
答案 1 :(得分:0)
您最好不要设置attr_accessible :user_id
。这将是您系统中的漏洞,任何人都可以通过批量分配来更改该值。而是在此代码中手动分配它或使用一些克隆功能并更改其他属性。
答案 2 :(得分:0)
一个混乱的解决方案是将attr_accessible :user_id
添加到您的模型中,虽然不建议这样做,因为它会使您的应用程序容易受到Mass Assignment的攻击。</ p>
如果你打算在开发中使用它一段时间,那很好。