Ruby on rails 3.1 如何在show.html.erb中呈现部分

Ruby on rails 3.1 如何在show.html.erb中呈现部分,ruby-on-rails-3.1,partial-views,rails-activerecord,Ruby On Rails 3.1,Partial Views,Rails Activerecord,我的RubyonRails应用程序中有两个模型——艺术家和歌曲。它们的关联如下: 类艺术家

我的RubyonRails应用程序中有两个模型——艺术家和歌曲。它们的关联如下:

类艺术家 你有很多歌吗

属性可访问:艺术家名称

类歌曲 属于:艺术家

attr\u可访问:title,:track\u URL,:artist\u id

我在views/artist/show.html.erb中有以下代码:

<%=  render 'artist_song'  %>

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

我试图在同一视图中渲染的部分内容(_artist_song.html.erb)如下所示:

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

它的工作方式是,当我点击通过部分显示的艺术家时,部分下面的代码必须向我显示属于特定艺术家的所有歌曲。 表标记中的部分代码和代码都单独工作。但当我将它们放在一起时,它们之间似乎存在冲突,服务器向我显示了无方法错误:

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'
NoMethodError in Artists#show
显示C:/Sites/OML/app/views/artists/show.html.erb,其中第9行出现:
未定义的方法“songs”#
提取的源(第9行附近):
6: 
7: 
8: 
9:     
10:         
11:           
12:         
Rails.root:C:/Sites/OML
应用程序跟踪|框架跟踪|完整跟踪
app/views/artists/show.html.erb:9:in`_app\u views\u artists\u show\u html\u erb\u 950110288\u 54062208'
app/controllers/artists\u controller.rb:21:in'show'
我找不到解决办法。任何帮助都将不胜感激。
多谢各位

您没有使用分部代码。您需要在
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.songs.each do |song| %>
  <tr>
    <td><%= song.title %></td>
  </tr>
<% end %>

为show Method添加@artist=artist.all-in控制器您如何设置
@artist
?它是一个ActiveRecord模型吗?艺术家是一个ActiveRecord模型是的