保存dup(已授权)ActiveRecord时,属性不会更新

时间:2014-06-09 16:26:54

标签: ruby-on-rails ruby activerecord

我有一个包含多个字段的模型我想复制,但我想更改其中一个属性,即units属性。

所以我去了:

new_item = old_item.dup
new_item.units = 0

我将此传递给模板,并允许用户指定多个单位。

然后我就去:

new_item.units = params[:units]
new_item.save

但我获得的值始终是原始ActiveRecord实例的值。

事实上,如果你这样做:

new_item = old_item.dup
new_item.units = 0
new_item.units = 500
new_item.save

new_item.units的值为old_item.units

这里发生了什么?

我在:

ruby 2.0.0p353 (2013-11-22 revision 43784) [i686-linux]
Rails 4.0.5

2 个答案:

答案 0 :(得分:0)

您应该将params[:units]作为强大的参数进行消毒(参见http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html)。请查看未经许可的参数:单位等短语的日志。如果是这样,只需添加params.permit(:units)

答案 1 :(得分:0)

在Rails 4.0.5上向另一位用户验证这是一个已在4.1中修复的错误。