Синтаксис активной записи Ruby on Rails для запроса обновлений статуса в приложении в стиле твиттера - PullRequest
3 голосов
/ 31 января 2010

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

Все это работает очень хорошо, но мой мозг только что умер, пытаясь выяснить синтаксис активной записи, необходимый для перечисления обновлений статуса (сообщений) от людей, за которыми пользователь следит, упорядоченных по времени в одном запросе.

Моя пользовательская модель выглядит следующим образом

class User < ActiveRecord::Base
    has_many :posts
    has_many :friendships
    has_many :friends, :through => :friendships
end

И модель поста

class Post < ActiveRecord::Base
    belongs_to :user
end

Для полноты модель Дружбы

class Friendship < ActiveRecord::Base
    belongs_to :user
    belongs_to :friend, :class_name => "User"
 end

В конечном итоге, что яхочу сделать это

@user.friends.reviews.all

Ответы [ 2 ]

1 голос
/ 31 января 2010

Я думаю, что ваша проблема связана с тем фактом, что @user.friends возвращает массив, и поэтому .posts не существует в массиве (даже если это массив объектов AR).

Я бы определил что-то вроде User#friend_posts, которое создает массив сообщений друзей, которые вы можете вернуть.

Что-то вроде:

def friend_posts
  posts = []
  friends.each { |friend| posts << friend.posts }
  posts
end
1 голос
/ 31 января 2010

Я предполагаю, что друг также является объектом User, поэтому у друга также есть has_many: posts:

@user.friends.posts.find(:all, :order => "created_at DESC"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...