Rails:nil的未定义方法`image':NilClass

时间:2013-10-08 12:57:02

标签: ruby-on-rails

我到处搜索,根本找不到任何解决方案。这是我的问题:

在我的“视图”文件夹中,我有“引脚”和“页面文件夹。

在“views / pins /”中,我创建了一个名为“_pin.html.erb”的文件,在其中,我写道:

<%= image_tag pin.image(:medium) %>

现在,在我的“views / pages”文件夹中,我的文件名为“home.html.erb”,在其中,我尝试使用此代码呈现“_pin.html.erb”的代码:

<%= render "pins/pin" %>

但是我收到了这个错误:

undefined method `image' for nil:NilClass 
Extracted source (around line #1):
<%= image_tag pin.image(:medium) %>

那么,可能是什么问题?我正在使用Paper clip,我尝试使用以下方法在“views / pins / index.html.erb”中呈现相同的代码:

<%= render @pins %>

它呈现完美但在“views / pages / home.html.erb”文件中(如上所述),我收到错误!

任何人都可以帮助我?

在我的“models / pin.rb”文件中,我有这个:

class Pin < ActiveRecord::Base
  attr_accessible :description, :image

  validates :description, presence: true

  belongs_to :user
  has_attached_file :image
  validates :user_id, presence: true
  validates_attachment :image, presence: true,
                        content_type: { content_type: ['image/jpeg', 'image/jpg', 'image/png', 'image/gif']},
                        size: { less_than: 5.megabytes}
  has_attached_file :image, styles: { medium: "320x240"}
end

我尽力解释我的问题,请告诉我我做错了什么?谢谢。

1 个答案:

答案 0 :(得分:2)

使用pin时,Rails会自动将每个render @pins传递到您的收藏集中。 如果你想使用partial,你必须像这样使用集合:

<%= render partial: 'pins/pin', collection: @pins %>