2010-11-24 6 views
0

Dans l'un de mes affichages, j'ai un formulaire qui va envoyer des données à l'automate.Rails: Quelle est une bonne façon de gérer les paramètres vides tableau

<%= form_for @user do |f| %> 
    <%= f.error_messages %> 

<% for committee in @committees %> 
    <div> 
    <%= check_box_tag "user[relevant_committee_ids][]", committee.id, @user.relevant_committees.include?(committee) %> 
    <%= committee.name %> 
    </div> 

<% end %> 
    <%= f.submit t(:save_settings) %> 
<% end %> 

Si la forme est vide, pas params [: l'utilisateur] est généré qui conduira le code suivant dans mon contrôleur à l'échec:

@user.relevant_committee_ids = params[:user][:relevant_committee_ids] ||= [] 

Avec le message d'erreur:

Vous avez un objet nul quand vous ne l'avez pas attendez-vous! Vous avez peut-être attendu une instance de Array. L'erreur est survenue lors de l'évaluation nulle []

Ce qui est une façon agréable, lisible pour obtenir un tableau vide si params. [: User] n'est pas généré?

Merci d'avance pour toute suggestion.

Répondre

1

Que diriez-vous

@user.relevant_committee_ids = params[:user] ? params[:user][:relevant_committee_ids] : [] 
0

Mon essai serait:

params[:user] ||= [] 
@user.relevant_committee_ids = params[:user][:relevant_committee_ids] 
@user.relevant_committee_ids ||= [] 

En général, je trouve qu'il est assez lisible pour utiliser x ||= [] syntaxe partout où je dois souligner que je remplace collection vide pour une valeur nulle.

0

@user.relevant_committee_ids = params[:user].try(:[], :relevant_committee_ids) || []

Questions connexes