Ruby on rails 更新Ruby on Rails控制器中的参数
我有一个控制器,我想在更新之前更新其中一个参数的值,以便在保存到数据库的相同过程中执行更新。不幸的是,以下代码没有在数据库中设置Ruby on rails 更新Ruby on Rails控制器中的参数,ruby-on-rails,Ruby On Rails,我有一个控制器,我想在更新之前更新其中一个参数的值,以便在保存到数据库的相同过程中执行更新。不幸的是,以下代码没有在数据库中设置z: if @model.x == "YES" && @model.z.blank? model_params[:z] = Time.now end @model.update_attributes(model_params) def model_params params.require(:model).permit(:x, :y, :
z
:
if @model.x == "YES" && @model.z.blank?
model_params[:z] = Time.now
end
@model.update_attributes(model_params)
def model_params
params.require(:model).permit(:x, :y, :z)
end
这应该做到:
def update
attributes = model_params.clone
if @model.x == "YES" && @model.z.blank?
attributes[:z] = Time.now
end
@model.update_attributes(attributes)
end
def model_params
params.require(:model).permit(:x, :y, :z)
end
首先,您的代码不起作用,因为调用
model_params
调用的是方法,而不是实际的局部变量。您需要创建返回散列的克隆并将其用于更新属性。您在中得到了第一个答案,但您错过了一个解释发生了什么(您已经编辑)或改进代码的好机会。Rails 5中更安全的方法是使用update代码>而不是更新属性
。这将导致活动记录检查模型验证update\u属性
是update
的别名,它们都执行验证(请参阅和)