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)
我确实使用了强参数,并尝试了这一点,但它没有工作