2013-10-13 1 views
1

У меня есть приложение rails, где пользователи отправляют отзывы о альбомах. Рассматриваемые обзоры называются «булавками» и загружаются с датой выпуска, названием альбома, именем исполнителя, обложкой обложки альбома и рангом за год. (как в моем любимом альбоме №1 года). Булавки принадлежат пользователям, а у пользователей много контактов. То, что я хочу сделать, - создать новую страницу на 2013 год, которая отображает каждого пользователя, а затем отображает нисходящий упорядоченный список изображений альбома, названия, исполнителя в качестве их первой десятки в списке за год. Что-то вроде:Показать список сообщений пользователя в Rails

<% @users.each do |user| %> 
<%= link_to (image_tag user.image(:small)), user %> <%= user.name %> 
<ol> 
    <li><%= @pin.album %> - <% @pin.artist%></li>  
    </ol> 
<% end %> 

мне нужно ограничить контакты только: дата => «2013», и мне нужно перечислить их в порядке убывания.

У меня возникли проблемы с выяснением контроллера и просмотра. Вот моя страница контроллер до сих пор:

def tens2013 
    @users = User.all 
    @pin = Pin.where(:date => "2013") 
end 

Как настроить мой контроллер, чтобы иметь возможность вызвать <% = @ pin.user.album%>?

ответ

1

То, как я это вижу, ваши модели должны быть установлены как это:

class User < ActiveRecord::Base 
    has_many :pins 
end 

class Pin < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :album 
end 

class Album < ActiveRecord::Base 
    has_many :pins 
end 

Pinuser_id должны иметь и album_id к почитать это.

Затем в контроллере, вы можете нетерпеливые нагрузки всех пользователей и их контакты, с соответствующим альбомом каждой булавочным, как это:

@users = User.includes(:pins => :album) 

Или ограничить до определенного года, сделай следующее:

@users = User.includes(:pins => :album).where('pins.date>=?','2013-01-01').references(:pins) 

Теперь вы можете выполнять итерацию через пользователей в своем представлении, а также через контакты каждого пользователя и альбом каждого булавки.

Для каждого контакта пользователя не нужно использовать @pin. Внесите необходимые изменения в свой вид и проведите через них, используя этот стиль:

@users.each do |user| 
    # do something 
    user.pins.each do |pin| 
    # Now you have "pin" and you can use it: 
    # pin.album... 
    # pin.artist... 
    end 
end 
+0

Большое вам спасибо за то, что поставили это усилие в ответ. Существует модель штыря и модель пользователя. альбом является лишь атрибутом булавки. Я думаю, что вы описываете выше, альбом рассматривается как его собственная модель. Верный? –

+0

Исправить. Возможно, это потому, что я не понял вашу модель? Альбом кажется больше похожим на сущность, и, как я понимаю, нет, это какой-то обзор альбома. – mjnissim

+0

Извините, булавка - это прозвище всего сообщения. Пользователь добавляет «pin», который имеет атрибуты: изображение (альбомное искусство), альбом (название), исполнитель (имя исполнителя), дата (год выпуска), ранжирование (любимое ранжирование года, например # 1) I могут перечислять пользователей и их атрибуты, а также количество контактов, которые у них есть, но я также пытаюсь перечислить атрибуты этих контактов. У меня нет возможности общаться, иначе я бы хотел. Это облегчило бы это. –

1
  1. Для того, чтобы позвонить @pin.user.album, вам необходимо определить зависимость сначала на уровне модели. Итак, в модели Pin у вас должно быть belongs_to :users, а в модели User вы должны указать has_many :pins. Теперь это будет предполагать, что в модели Pin есть поле под названием user_id, которое будет внешним ключом. Также используйте :include в запросах, когда вы собираетесь обращаться к зависимым классам следующим образом. Это позволяет избежать проблемы с запросом N + 1. например:

    @pin = Pin.includes(:users).where("date >= ?","2013-01-01") 
    
  2. Чтобы ограничить ответы только в 2013 году, вы можете искать Ваш запрос также:

    @pin = Pin.where("date >= ?","2013-01-01") 
    
+0

Спасибо, что ответили. Да, у меня есть pin belongs_to: пользователи и пользователи has_many: контакты. Pin имеет user_id. Мой сайт отлично работает для того, что я использую в настоящее время. У меня проблемы с созданием страницы 2013 года. используя ваш совет выше, когда я звоню @ pin.user.album Я получаю undefined метод 'user 'для #

+0

Вот текущий сайт, если он помогает: http: // thetens.us –

+0

change принадлежит_to: users to принадлежит_to: пользователь (в сигуляре). Это должно сработать. – mjnissim

Смежные вопросы