Search code examples
ruby-on-railsrubynested-attributes

Rails - How can I display one nested attributes


I have a new problem, I Create a web where I upload many images, using nested attributes and polymorphic table, in my index.html I want to show only one image, but I can't find how. But I'm new in rails.

photography.rb

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

image.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 %>

With the for method I show all the image, try add .first, but says undefined method first for 5:Fixnum. I think that I have to create a helper method, but I not sure. Can anyone help me?. Thanks


Solution

  • Try:

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

    Also, for is very rarely used in ruby, instead do:

    <% @photos.each do |photo| %>