2015-02-28 2 views
1

Я работаю над приложением, и у меня есть модель с атрибутом «фильмы» (5 лучших фильмов). Когда пользователь пытается изменить топ-5 фильмов, которые я хочу, чтобы отобразить каждый фильм в другом входе, но я не знаю, как это сделать (потому что все 5 фильмов представляют собой один единственный атрибут)Как отображать данные из одного столбца на несколько входов?

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

def show 
    @user = User.find(params[:id]) 
    @user.movies = @user.movies.split(',') 
end 

На мой взгляд

<%= form_for @user do |f| %> 
    <%= f.label :movies %> 
    <%= f.text_field :movies[0] %> 
    . 
    . 
    . 
    <%= f.label :movies %> 
    <%= f.text_field :movies[4] %> 
<% end %> 

конечно, это не работает!

+0

Можете ли вы показать нам часть модели, чтобы понять, как вы определили ваши '' фильмы '' атрибут? Это текстовое поле, или это ассоциация с другой моделью? – dgilperez

ответ

2

Вы можете добавить использовать виртуальный атрибут в вашей User модели справиться с этим, как это:

class User < ActiveRecord::Base 
    def movies_list 
    movies.split(',') 
    end 

    def movies_list=(list) 
    self.movies = list.join(',') 
    end 
end 

Тогда в контроллере вы просто сделать:

def show 
    @user = User.find(params[:id]) 
end 

А на ваш взгляд, вы можете обработайте вашу форму следующим образом:

<%= form_for @user do |f| %> 
    <%= f.label :movies %> 

    <%- @user.movies_list.each do |movie| %> 
    <%= text_field_tag 'user[movies_list][]' %> 
    <% end %> 
<% end %> 

Это позволит вашему update действие на users_controller для доступа к массиву фильмов в params[:user][:movies_list], что модель будет понимать и обрабатывать.

Наконец, не забудьте добавить :movies_list к вашим разрешенным параметрам на контроллере, если вам нужно.

EDIT: Благодаря @BroiSatse в комментариях, в качестве альтернативы text_field_tag синтаксиса можно использовать формы-строитель f.text_field :movies_list, multiple: true, value: movie

+1

вместо пользователя 'text_field_tag ​​'[movies_list] []'' вы можете использовать form_builder: 'f.text_field: movies_list, multiple: true, value: movie' – BroiSatse

+0

Спасибо! Отредактировал ответ. – dgilperez

+1

Большое спасибо. Это решило мою проблему! – Madalina

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