2010-11-26 4 views
0

Je développe une petite application dans Rails 3. Sur une page, je rassemble des ID pour chaque utilisateur (dans une boucle) dans un tableau. Ensuite, je place le contenu de ce tableau dans un champ de texte caché et l'envoie à une méthode appelée "add_all". Dans cette méthode, j'ai une boucle qui est censée choisir chaque identifiant d'utilisateur et l'ajouter à la base de données une par une, mais il ajoute seulement le premier.Rails 3. Impossible de boucler dans le tableau

Dans la vue (un peu simplyfied):

<% profileids = Array.new %> 
<% @notfriends.each do |contact| %> 
<% profileids << contact.id %> 
<% end %> 

<%= hidden_field_tag :profileids, profileids.join(",") %> 

Dans le contrôleur:

params[:profileids].each do |id| 

@profile = Profile.find(params[:profile_id]) 

@contact = Contact.create(:profile_id => params[:profile_id], :friend_id => id) 

@profile.contacts << @contact 

end 

que je fais vraiment ce droit? Pourquoi le contrôleur ne parcourt-il pas chacun des tableaux?

Répondre

2

Vous appelez "join" sur votre tableau de profil. Cela en fait une chaîne et en tant que telle, vous ne pouvez pas itérer en utilisant "chaque".

Ce que vous devez faire dans votre contrôleur est ceci:

id_array = params[:profileids].split(",") 
id_array.each do |id| 
    @profile = Profile.find(params[:profile_id]) 
    @contact = Contact.create(:profile_id => params[:profile_id], :friend_id => id) 
    @profile.contacts << @contact 
end 

Donnez un coup de feu et faites-nous savoir comment cela fonctionne.

+0

Fonctionne comme un charme! Je vous remercie! –

0

essayer cette

params[:profileids].split(",").each do |id| 

Fondamentalement, vous essayez de parcourir une chaîne et non un tableau.

Questions connexes