我一直在努力解决这个问题差不多一个月了,似乎无法解决这个问题。我对RoR很新,并且我确信有一些基本的我可以忽略......帮助非常感谢!
我有三个资源相互嵌套:(1)书籍,(2)章节,(3)页面。 Page模型通过paperclip gem具有图像属性。
每种模型如下:
class Book < ActiveRecord::Base
attr_accessible :synopsis, :title
has_many :chapters
class Chapters < ActiveRecord::Base
attr_accessible :synopsis, :title
belongs_to :book
has_many :pages
class Pages < ActiveRecord::Base
attr_accessible :page_image, :page_number
has_attached_file :page_image, styles: { medium: "1024x768>", thumb: "300x300>" }
belongs_to :chapter
如您所见,每个页面都有一个图像。在Book show 页面中,我希望有一个部分显示属于该Book的所有章节,每个章节的链接将是属于该章节的第一页的图像。< / p>
图书管理员:
class BookController < ApplicationController
...
def show
@book = Book.find(params[:id])
@chapters = @book.chapters.all
respond_to do |format|
format.html # show.html.erb
format.json { render json: @book }
end
end
...
图书的展示视图:
<ul class="thumbnails">
<% @chapters.each do |chapter| %>
<li class="span3">
<div class="thumbnail">
<%= image_tag chapter.pages.first.page_image %>
</div>
</li>
<% end %>
</ul>
这是我得到的错误:
undefined method `page_image' for nil:NilClass
Extracted source (around line #5):
2: <% @chapters.each do |chapter| %>
3: <li class="span3">
4: <div class="thumbnail">
5: <%= image_tag chapter.pages.first.page_image %>
6:
答案 0 :(得分:1)
你的所有章节都有页面吗?看起来其中一个没有,first
正在返回nil
。
chapter.pages.first.page_image
意味着,对于给定的章节(来自@chapters
),获取一个页面数组。进入第一页(如果没有页面,则为nil
)。点击page_image
就可以了。
您可能想要的是
image_tag chapter.pages.first.try(:page_image).try(:url, :thumb)
try方法将测试调用它的对象是nil
,如果是,则返回nil
而不是导致异常。