Ruby on rails 仅更新rails中存在的参数

Ruby on rails 仅更新rails中存在的参数,ruby-on-rails,validation,params,Ruby On Rails,Validation,Params,我知道我可以这样做: @object.update_attributes(date: params[:date]) if params[:date].present? @object.update_attributes(date: params[:name]) if params[:name].present? @object.update_attributes(date: params[:thing]) if params[:thing].present? @object.update_att

我知道我可以这样做:

@object.update_attributes(date: params[:date]) if params[:date].present?
@object.update_attributes(date: params[:name]) if params[:name].present?
@object.update_attributes(date: params[:thing]) if params[:thing].present?
@object.update_attributes(date: params[:item]) if params[:item].present?
但是有没有一种方法可以同时做到这一切呢? 比如:

@object.update_attributes(object_params)
如果不是通过url传入,它不会在我的数据库中放置空值。所以我可以打电话
Object.update(date:date.today,name:“ryan”)
它只会更新这些项目。

您可以试试这个

@object.update\u属性(参数)

此外,使用强参数也是一种很好的做法,将其放在控制器的末尾

private def object_params params.require(:object).permit(:date, :name, :item, :thing) end end 私有的 定义对象参数 参数require(:object).permit(:date,:name,:item,:thing) 结束 结束 并将其用作


@object.update_attributes(object_params)
只需选择控制器中非
nil
参数,然后像往常一样使用
@object.update_attributes(object_params)

def object_params
  params.require(:object).permit(:date, :name, :thing, :item).select { |k, v| !v.nil? }
end
试试这个:

keys = [:date, :name, :item, :thing]
object_params = params.slice(*keys).delete_if { |k,v| v.nil? }
@object.update_attributes(object_params)
如果参数键与模型列匹配,也可以执行此操作:

object_params = params.slice(*Model.column_names).delete_if { |k,v| v.nil? }
@object.update_attributes(object_params)

我确实使用了强参数,并尝试了这一点,但它没有工作