Rails - Как я могу отобразить один вложенный атрибут

У меня новая проблема: я создаю сеть, в которую загружаю много изображений, используя вложенные атрибуты и полиморфную таблицу, в своем index.html я хочу показать только одно изображение, но не могу найти, как это сделать. Но я новичок в рельсах.

фотография.рб

class Photography < ActiveRecord::Base
    validates :title, :description, presence: true
    belongs_to :user
    has_many :images, as: :imageable, dependent: :destroy
    accepts_nested_attributes_for :images, :reject_if => lambda { |a| a[:img_str].blank? }, :allow_destroy => true
end

изображение.rb

class Image < ActiveRecord::Base
    belongs_to :imageable, polymorphic: true

    mount_uploader :img_str, AssetUploader
end

index.html.erb

<% for photo in @photo %>
    <%= link_to photo.title, photography_path(photo) %>
    <% photo.images.each do |images| %>
        <%= images.img_str %>
    <% end %>
<% end %>

С помощью метода for я показываю все изображения, пытаюсь добавить .first, но говорит undefined method first for 5:Fixnum. Я думаю, что мне нужно создать вспомогательный метод, но я не уверен. Может кто-нибудь мне помочь?. Спасибо


person Sant Davalos    schedule 04.11.2014    source источник
comment
try add .first - а куда ты его добавил?   -  person BroiSatse    schedule 04.11.2014
comment
@BroiSatse в предложении images.img_str.first   -  person Sant Davalos    schedule 04.11.2014


Ответы (1)


Пытаться:

<% for photo in @photo %>
    <%= link_to photo.title, photography_path(photo) %>
    <%= photo.images.first.img_str if photo.images.any? %>
<% end %>

Кроме того, for очень редко используется в ruby, вместо этого выполните:

<% @photos.each do |photo| %>
person BroiSatse    schedule 04.11.2014
comment
Я не могу этого сделать, потому что изображения представляют собой массив, и я получаю неопределенный метод `img_str' для nil:NilClass, когда я пытаюсь ‹%= photo.images.first.img_str %› - person Sant Davalos; 04.11.2014
comment
@SantDavalos - Это означает, что для фотографии нет изображений. Ответ обновлен, чтобы справиться и с этим случаем. Кроме того, изображения не являются массивом! - person BroiSatse; 04.11.2014
comment
К сожалению, ошибка связана с неопределенным методом `img_str' для #‹Image::ActiveRecord_Associations_CollectionProxy:0x007fe6d809aad0› - person Sant Davalos; 04.11.2014
comment
@SantDavalos - Вы уверены, что ставите первое место между изображениями и img_str? first не имеет права возвращать CollectionProxy - person BroiSatse; 04.11.2014
comment
Большое спасибо, чувак, я поставил Первую до конца, с этой новой строкой работает отлично. - person Sant Davalos; 04.11.2014