Rails - 显示关联对象属性列表

时间:2013-03-02 14:34:54

标签: ruby-on-rails

我有一个列出小说的页面,我想显示每个相关插图的缩略图。我知道该关联正在工作,因为我可以显示每个相关插图对象的toString等价物。当我尝试遍历插图列表时,我得到:

undefined method `image_thumbnail_url' for #<ActiveRecord::Relation:0x007f023c07aa18>

以下是代码:

<% if notice %>
<p id="notice"><%= notice %></p>
<% end %>

<h1 style="padding-left:25px">Archive Overview</h1>

<% @novels.each do |novel| %>
<div class="row">
    <div class="span3" style="padding:0px 0px 25px 25px">
        <%= link_to novel.name, novel %>
    </div>
    <div class="span4">
        <p><%= novel.author%></p>
        <p><%= novel.publisher %></p>
        <p><%= novel.publication_date %></p>
    </div>
    <div class="span5">
        <div style="display: none;"><%= illustrations = @novels.map{ |novel| novel.illustrations} %>
        </div>
        <ul>    
            <% illustrations.each do |illustration| %>
            <li><%= illustration.image_thumbnail_url %></li>
            <% end %>
        </ul>
    </div>
</div>

1 个答案:

答案 0 :(得分:2)

你在代码中做了一些非常奇怪的事情。首先,如果您想在不显示代码的情况下运行代码,可以使用<% ... %>代替<div style="display: none;"><%= ... %></div>

实际问题在于:

illustrations = @novels.map{ |novel| novel.illustrations }

执行此操作时,您不会获得具有插图对象的数组,而是具有插图对象集合的数组。并且集合没有方法image_thumbnail_url

你已经在重复小说,所以我建议你这样做:

<div class="span5">
  <ul>    
  <% novel.illustrations.each do |illustration| %>
    <li><%= illustration.image_thumbnail_url %></li>
  <% end %>
  </ul>
</div>