has_one | вложенные атрибуты -

Как бы я показал один из многих вложенных объектов в представлении индекса

class Album < ActiveRecord::Base 

has_many: photos
accepts_nested_attributes_for :photos,
 :reject_if => proc { |a| a.all? { |k, v| v.blank?} }


has_one: cover
accepts_nested_attributes_for :cover


end

class Album Controller < ApplicationController
  layout "mini"
  def index
    @albums = Album.find(:all,
    :include => [:cover,]).reverse

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @albums }
    end
  end

Это то, что я так тариф. Я просто хочу показать обложку для каждого альбома.

Любая информация об этом будет огромной помощью!!


person MrThomas    schedule 15.03.2010    source источник


Ответы (1)


В вашем представлении перебирайте вложенные данные. то есть

<% @albums.each do |album| %>

  <%= album.name %>
  <% # display other album details %>

  <%= image_tag album.cover.name %>

  <% album.photos.each do |photo| %>
    <%= image_tag photo.name %>
  <% end %>
<% end %>

В вашем контроллере включите photos в результаты запроса.

@albums = Album.all :include => [:photos]

Вам не нужно включать :cover в запрос, поскольку это ассоциация has_one (если только вы не используете поля из :cover в своем условии WHERE).

Я подозреваю, что вы делаете вызов reverse для сортировки набора результатов. Вместо этого используйте предложение :order.

@albums = Album.all :include => [:photos], :order => "created_at ASC"

OR

@albums = Album.all :include => [:photos], :order => "name ASC"
person Harish Shetty    schedule 15.03.2010
comment
Это хорошо работает, когда у вас есть разные контроллеры, но не работает с вложенными атрибутами. получение ошибки: неопределенная локальная переменная или метод `photo' для #‹Class:0x264c678› - person MrThomas; 15.03.2010