2015-12-01 1 views
0

Je suis obtenir les computer_ids de l'utilisateur commeRails tableau de cases à cocher ne rien choisir

<%= check_box_tag "user[computer_ids][]", computer.id, @user.computers.include?(computer) %> 

Si je choisis au moins un tableau de case à cocher, qui est très bien. Mais si je n'ai rien choisi, cela me donne un tableau comme ça

undefined method `[]' for nil:NilClass 

C'est parce qu'il n'y a pas de paramètre. Je n'ai pas trouvé de solution. La relation est HABTM

Je tente de le contrôler est vide ou non

if (!(params[:user][:computer_ids].empty?) ) 

EDIT:

depuis computer_ids est le seul paramètre utilisateurs il ne comprenait pas ce params [: utilisateur] est et c'est pourquoi il donne une erreur.

if (!(params[:user].present?) ) , has solved the problem 
+0

'si params [: user] [: computer_ids] .present? 'cette condition va résoudre votre problème –

+0

n'a rien changé –

Répondre

0

Ajouter un champ caché au-dessus de toutes les cases à cocher avec une valeur vide. Il sera envoyé en cas l'utilisateur n'a pas vérifié toutes les cases comme: -

<%= form_for @user do |f| %> 
    <%= hidden_field_tag "user[computer_ids][]", nil %> 
    <% Computer.all.each do |computer| %> 
     <%= check_box_tag "user[computer_ids][]", computer.id, @user.computers.include?(computer) %> 
    <% end %> 
    <%= f.submit 'Submit'%> 
<% end %> 

Rejeter des valeurs vides de params comme: -

params[:user][:computer_ids] = params[:user][:computer_ids].reject { |c| c.empty? } 
+0

Je pense que vous voulez dire' <% = hidden_field_tag ​​"utilisateur [computer_ids] []", nil%> ' –

+0

' "user" => {"computer_ids" => ["", "1"]} ', le vide me pose un problème –