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
的别名,它们都执行验证(请参阅和)