根据传递的参数更新表

时间:2017-10-16 23:21:58

标签: ruby ruby-on-rails-4

我试图找出如何只更新表中的特定列。如果表中有六列,是否可以只更新传递参数的列?

我在控制器中使用了update方法。

def update
  customer_details = Customer.find(params[:id])
  customer_details.update!(col1: params[:param1],
                           col2: params[:param2],
                           col3: params[:param3],
                           col4: params[:param4],
                           col5: params[:param5])
  head :no_content
end

当我仅传递param2param3时,我想仅更新col2col3。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

你可以做这样的事情

attributes = {
  col1: params[:param1],
  col2: params[:param2],
  col3: params[:param3],
  col4: params[:param4],
  col5: params[:param5]
}
attributes.select! { |_k, v| v.present? }
customer_details.update!(attributes)

答案 1 :(得分:0)

仅传递param2param3

,并不清楚您的意思
  • 如果您有params,其:params2:params3个键和值缺失,则无需任何特殊内容。只是做:

    customer_details.update!(params)
    
  • 如果您的params:params2值为:params3 nil,请执行以下操作:

    customer_details.update!(params.compact)