0

如果您访问 www.leapfm.com,您会看到每首歌曲的右侧括号中都有一个 youtube 网址。在评估反馈后,我决定在括号中显示流派标签。

在尝试这样做时,

我收到此错误:

Couldn't find Genre without an ID
Extracted source:

def genre_name
@genre = Genre.find(params[:id])
end
def get_last_song

song_controller 片段

def index
      if params[:query].present? 
      @songs = Song.search(params)
      get_last_song
      genre_name
    elsif params[:genre]
      @songs = Song.tagged_with(params[:genre]).paginate(:page => params[:page], :per_page => 15)
      get_last_song
      genre_name
    else      
      @songs = Song.order('id').order('plusminus desc nulls last').paginate(:page => params[:page], :per_page => 15) 
      #@songs = Song.tally.paginate(:page => params[:page], :per_page => 15)
      get_last_song
      genre_name
    end
  end

  def genre_name
    @genre = Genre.find(params[:id])
  end

index.html.erb (_song partial) 片段

<div class="title">
  <%=link_to image_tag('arrow.gif'), vote_for_song_path(song), :remote => true, :method => :put  if controller.action_name == "index" %>
  <%= link_to song.title, song %><span class="subtext"> (<%= song.genre_name %>)</span>
</div>

song.rb 片段:

类 Song < ActiveRecord::Base

acts_as_voteable

  belongs_to :user
  has_many :comments, :dependent => :destroy
  has_many :genre_songs
  has_many :genres, through: :genre_songs

流派.rb

class Genre < ActiveRecord::Base
  has_many :genre_songs, :dependent => :destroy
  has_many :songs, through: :genre_songs

end

模式片段

 create_table "genre_songs", force: true do |t|
    t.integer  "genre_id"
    t.integer  "song_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "genre_songs", ["genre_id"], name: "index_genre_songs_on_genre_id", using: :btree
  add_index "genre_songs", ["song_id"], name: "index_genre_songs_on_song_id", using: :btree

  create_table "genres", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "songs", force: true do |t|
    t.string   "title"
    t.string   "artist"
    t.text     "url"
    t.string   "track_file_name"
    t.string   "track_content_type"
    t.integer  "track_file_size"
    t.datetime "track_updated_at"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "plusminus"
  end
4

1 回答 1

1

您需要摆脱 gendre_name 方法,因为它不会给您想要的东西。您已经将@songs 分配给了一些歌曲列表,因此您很可能在您的视图中的某个地方有类似的东西:

<% @songs.each do |song| %>
   # display song row
<% end %>

如果是这样,请在每个“循环”中使用如下所示的内容:

(<%= song.genres.map(&:names).join(', ') %>)
于 2013-08-09T01:35:08.183 回答