2013-07-31 3 views
0

Итак, у меня есть приложение, которое позволяет пользователям загружать и комментировать песни. Однако я хотел бы добавить категорию жанров. Когда пользователи загружают песни, они смогут выбрать жанр песни. Это поможет при добавлении поиска.Как заполнить выпадающее меню [rails4]

Для быстрого обзора кода см: www.github.com/apane/leap

Я предполагаю, что я хотел бы добавить таблицу жанров в БД и связать его с песнями, например:

Жанр принадлежит песне, песня has_many жанров.

Но после этого я в тупике. Как заполнить раскрывающийся список жанров?

+0

вы пытались что-нибудь еще? быстрый поиск показывает http://stackoverflow.com/questions/5019889/drop-down-menu-with-value-from-another-model – sircapsalot

+1

http://chat.stackoverflow.com/rooms/34557/http-stackoverflow- com-questions-17979114-how-to-populate-a-dropdown-rails4 – rmagnum2002

ответ

0
rails g model genre name 
rails g model genre_song genre:belongs_to song:belongs_to 
rake db:migrate 

модели/genre.rb

has_many :genre_songs 
has_many :songs, through: :genre_song 

модели/song.rb

has_many :genre_songs 
has_many :genres, through: :genre_song 

def self.tagged_with(name) 
    Genre.find_by_name!(name).songs 
end 

def tag_list 
    genres.map(&:name).join(", ") 
end 

def tag_list=(names) 
    self.genres = names.split(",").map do |n| 
    Genre.where(name: n.strip).first_or_create! 
    end 
end 

песни/index.html.erb

Genres: <%= raw song.genres.map(&:name).map { |t| link_to t, genre_path(t) }.join(', ') %> 

песни/_form.html.erb

<div class="field"> 
    <%= f.label :tag_list, "Genres (separated by commas)" %><br /> 
    <%= f.text_field :tag_list %> 
</div> 

songs_controller.rb

добавить tag_list в разрешенное Params

+0

thanks pal:]]. –

0

После добавления таблицы жанров к вашей БД, вы можете сделать что-то вроде этого:

<%= collection_select(:song, :genre_id, Genre.all, :id, :name) %> 

Где: песня относится к вашей форме для загрузки песен.

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