2017-10-16 10 views
0

J'essaie de comprendre comment je peux mettre à jour uniquement des colonnes spécifiques dans une table. Si j'ai six colonnes dans une table, est-il possible de mettre à jour seulement celles pour lesquelles le param est passé? J'ai une méthode update dans un contrôleur.Mettre à jour la table en fonction des paramètres passés

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 

Quand je passe juste param2 et param3, je veux juste mettre à jour col2 et col3. Comment puis-je y parvenir?

Répondre

0

Vous pouvez faire quelque chose comme ça

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) 
0

ne sait pas ce que vous entendez en passant seulement param2 et param3.

  • Si vous avez params, dont :params2 et :params3 clés et des valeurs sont manquantes, alors qu'il faut rien de spécial. Il suffit de faire:

    customer_details.update!(params) 
    
  • Si vous avez params, dont :params2 et :params3 valeurs sont nil, puis faites:

    customer_details.update!(params.compact)