0

私の Ruby on Rails アプリケーションには、Artist と Song という 2 つのモデルがあります。それらは次のように関連付けられています。

class Artist < ActiveRecord::Base

has_many :曲

attr_accessible :artist_name

class Song < ActiveRecord::Base

所属先:アーティスト

attr_accessible :title, :track_URL, :artist_id

views/artist/show.html.erb に次のコードがあります。

<%=  render 'artist_song'  %>

<table>
    <% @artist.songs.each do |song| %>
        <tr>
          <td><%= song.title %></td>
        </tr>
    <% end %>
</table>

同じビューで render(_artist_song.html.erb) しようとしている部分的な Im は次のようになります。

<table>
  <% @artist = Artist.all %>
  <% @artist.each do |artist| %>
      <tr>
        <td><%= link_to artist.artist_name, artist %></td>
      </tr>
  <% end %>
</table>

パーシャルの下にあるコードは、特定のアーティストに属するすべての曲を表示する必要があります。table タグ内のパーシャルとコードの両方が個別に機能しています。しかし、それらをまとめると、それらの間に競合があるように見え、サーバーは次の No Method Error を表示しています。

NoMethodError in Artists#show

Showing C:/Sites/OML/app/views/artists/show.html.erb where line #9 raised:

undefined method `songs' for #<Array:0x5fe1418>
Extracted source (around line #9):

6: 
7: 
8: <table>
9:     <% @artist.songs.each do |song| %>
10:         <tr>
11:           <td><%= song.title %></td>
12:         </tr>
Rails.root: C:/Sites/OML

Application Trace | Framework Trace | Full Trace
app/views/artists/show.html.erb:9:in `_app_views_artists_show_html_erb__950110288_54062208'
app/controllers/artists_controller.rb:21:in `show'

解決策が見つかりませんでした。どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

0

パーシャルを使用していません。artistループ 内でパーシャルをレンダリングする必要があります。

show.html.erb

<table>
  <% @artists = Artist.all %>
  <% @artists.each do |artist| %>
    <tr>
      <td><%= link_to artist.artist_name, artist %></td>
    </tr>
    <%= render :partial => 'artist_song', :artist => artist %>
   <% end %>
</table>

このようにして、現在のオブジェクトをパーシャル内に渡すartistので、次のことができます。

artist_song.html.erb

<% artist.songs.each do |song| %>
  <tr>
    <td><%= song.title %></td>
  </tr>
<% end %>
于 2014-02-11T19:22:52.043 に答える