我知道我可以这样做:
@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")
,它只会更新这些项目。
答案 0 :(得分:1)
你可以试试这个
@object.update_attributes(params)
此外,使用强力参数,将其置于控制器的最后是一个好习惯
private def object_params params.require(:object).permit(:date, :name, :item, :thing) end end
并将其用作
@object.update_attributes(object_params)
答案 1 :(得分:1)
只需选择控制器中不是params
的{{1}}并照常使用nil
@object.update_attributes(object_params)
答案 2 :(得分:0)
试试这个:
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)