2010-11-26 2 views
0

Я разрабатываю небольшое приложение в Rails 3. На одной странице я собираю идентификаторы для каждого пользователя (в каждом цикле) в массиве. Затем я помещаю содержимое этого массива в скрытое текстовое поле и отправляю его методу «add_all». В этом методе я получил цикл, который должен выбрать каждый идентификатор пользователя и добавить его в базу данных по одному, но только добавляет первый.Rails 3. Не удается создать цикл через

В представлении (немного simplyfied):

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

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

В контроллере:

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 

Могу ли я на самом деле делать это правильно? Почему каждый контроллер не перебирает массив?

ответ

2

Вы вызываете «присоединиться» к вашему массиву профилей. Это делает его строкой, и поэтому вы не можете перебирать ее, используя «каждый».

Что вы должны делать в контроллере это:

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 

Дайте, что выстрел и дайте нам знать, как это работает.

+0

Работает как очарование! Спасибо! – 2010-11-28 09:58:33

0

попробовать этот

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

В принципе, вы пытаетесь перебирать строки, а не массив.

Смежные вопросы