Скрепка выдает ошибку NilClass для .first

Версия Ruby: 2.0

Версия Rails: 4.0

У меня есть класс галереи - это has_many :assets (активы представляют собой модель, которая принимает загрузки из Paperclip)

Я пытаюсь отобразить миниатюру для каждой галереи в файле index. Я хочу сделать что-то вроде:

<%= gallery.assets.first.photo.url(:thumb) %>

Однако это дает мне эту ошибку: undefined methodphoto' для nil: NilClass`

Странная часть:

Это работает:

<% gallery.assets.each do |asset| %>
    <%= image_tag asset.photo.url(:thumb) %>
<% end %>

Но мне нужен только один образ, а не все. Что мне не хватает?

Обновить

Вот запрошенный вывод консоли

Gallery.first.assets

2.0.0p247 :010 > Gallery.first.assets
  Gallery Load (0.3ms)  SELECT "galleries".* FROM "galleries" ORDER BY "galleries"."id" ASC LIMIT 1
  Asset Load (0.2ms)  SELECT "assets".* FROM "assets" WHERE "assets"."gallery_id" = ?  [["gallery_id", 2]]
 => #<ActiveRecord::Associations::CollectionProxy [#<Asset id: 15, gallery_id: 2, created_at: "2013-08-23 23:12:47", updated_at: "2013-08-23 23:12:47", photo_file_name: "mightywash.png", photo_content_type: "image/png", photo_file_size: 24967, photo_updated_at: "2013-08-23 23:12:46">]> 
2.0.0p247 :011 > 

Галерея.first.assets.first

2.0.0p247 :011 > Gallery.first.assets.first
  Gallery Load (0.4ms)  SELECT "galleries".* FROM "galleries" ORDER BY "galleries"."id" ASC LIMIT 1
  Asset Load (0.2ms)  SELECT "assets".* FROM "assets" WHERE "assets"."gallery_id" = ? ORDER BY "assets"."id" ASC LIMIT 1  [["gallery_id", 2]]
 => #<Asset id: 15, gallery_id: 2, created_at: "2013-08-23 23:12:47", updated_at: "2013-08-23 23:12:47", photo_file_name: "mightywash.png", photo_content_type: "image/png", photo_file_size: 24967, photo_updated_at: "2013-08-23 23:12:46"> 
2.0.0p247 :012 > 

Обновление 2

asset.rb

class Asset < ActiveRecord::Base
    belongs_to :gallery
    has_attached_file :photo,
        :styles => {
            :thumb => "100x100#",
            :small => "300x300>",
            :large => "600x600>"
        }
end

person drewwyatt    schedule 23.08.2013    source источник
comment
Можете ли вы открыть rails console и показать нам результат как gallery.assets, так и gallery.assets.first?   -  person Serabe    schedule 24.08.2013
comment
@Serabe да, сейчас обновляю.   -  person drewwyatt    schedule 24.08.2013
comment
Добавьте gallery.assets.first.photo, пожалуйста.   -  person Serabe    schedule 24.08.2013
comment
@Серабе NoMethodError: undefined method 'photo' for #<Asset:0x007fde7dc01aa8>   -  person drewwyatt    schedule 24.08.2013
comment
Добавьте Asset код модели, пожалуйста.   -  person Serabe    schedule 24.08.2013
comment
давайте продолжим это обсуждение в чате   -  person Serabe    schedule 24.08.2013


Ответы (1)


Я подозреваю, что в одном из ваших активов может не храниться фотография. Попробуйте сделать это вместо этого:

<%= @gallery.assets.first.photo.url(:thumb) if [email protected]? && @gallery.assets.first.photo  %>

а еще лучше поместите что-то подобное в свою галерею моделей;

def thumb_url
  unless assets.empty?
    assets.first.photo.url(:thumb) if assets.first.photo
  end
end

а затем, на ваш взгляд:

<%= @gallery.thumb_url %>
person ADAM    schedule 24.08.2013