仅更新存在的参数 rails
Update only params that exist rails
我知道我可以做这样的事情:
@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_attributes(params)
此外,最好使用强参数,将其放在控制器的末尾
private
def object_params
params.require(:object).permit(:date, :name, :item, :thing)
end
end
并将其用作
@object.update_attributes(object_params)
只需 select 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)
我知道我可以做这样的事情:
@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_attributes(params)
此外,最好使用强参数,将其放在控制器的末尾
private def object_params params.require(:object).permit(:date, :name, :item, :thing) end end
并将其用作
@object.update_attributes(object_params)
只需 select 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)