所以,我有一个应用程序可以让用户上传和评论歌曲。但是,我想添加一个流派类别。当用户上传歌曲时,他们将能够选择歌曲的流派。这将有助于我添加搜索。
有关代码的快速概述,请参见:www.github.com/apane/leap
我猜我会在数据库中添加一个流派表并将其与歌曲相关联,例如:
流派属于_歌曲,一首歌有_多种流派。
但在那之后,我很难过。如何填充流派下拉列表?
所以,我有一个应用程序可以让用户上传和评论歌曲。但是,我想添加一个流派类别。当用户上传歌曲时,他们将能够选择歌曲的流派。这将有助于我添加搜索。
有关代码的快速概述,请参见:www.github.com/apane/leap
我猜我会在数据库中添加一个流派表并将其与歌曲相关联,例如:
流派属于_歌曲,一首歌有_多种流派。
但在那之后,我很难过。如何填充流派下拉列表?
将流派表添加到您的数据库后,您可以执行以下操作:
<%= collection_select(:song, :genre_id, Genre.all, :id, :name) %>
其中 :song 是指您上传歌曲的表单。
rails g model genre name
rails g model genre_song genre:belongs_to song:belongs_to
rake db:migrate
模型/流派.rb
has_many :genre_songs
has_many :songs, through: :genre_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>
歌曲控制器.rb
添加tag_list
到允许的参数