Проблема с отношениями Rails has_many - PullRequest
4 голосов
/ 29 марта 2010

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

class User < ActiveRecord::Base

has_many :pages
has_many :posts
has_many :followings
has_many :pages, :through => :followings, :source => :user

class Page < ActiveRecord::Base

has_many :posts
belongs_to :user
has_many :followings
has_many :users, :through => :followings

class Following < ActiveRecord::Base

belongs_to :user
belongs_to :page

class Post < ActiveRecord::Base

belongs_to :page
belongs_to :user

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

При попытке вызвать followings.pages я получаю сообщение об ошибке «метод не найден». В идеале я хотел бы иметь возможность вызывать файлы User.pages таким образом, чтобы получать страницы, на которые подписан пользователь, а не страницы, которые он создал.

Я новичок в программировании и Rails, поэтому любая помощь будет высоко ценится! Я пытался найти как можно большую часть этого сайта, прежде чем публиковать этот вопрос (наряду с многочисленными поисками в Google), но ничто не казалось таким конкретным, как моя проблема ...

Ответы [ 3 ]

4 голосов
/ 29 марта 2010

Вы определили ассоциацию pages дважды. Измените свой User класс следующим образом:

class User < ActiveRecord::Base
  has_many :pages
  has_many :posts
  has_many :followings
  has_many :followed_pages, :class_name => "Page", 
                 :through => :followings, :source => :user
end

Теперь давайте проверим ассоциацию:

user.pages # returns the pages created by the user
user.followed_pages # returns the pages followed by the user
0 голосов
/ 29 марта 2010

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

class User < ActiveRecord::Base
    has_many :pages
    has_many :posts
    has_many :followings
    has_many :followed_pages, :class_name => "Page", :through => :followings
end class

Теперь, используя ассоциацию «многие ко многим»: a_user.followed_pages должен привести к коллекции страниц.

0 голосов
/ 29 марта 2010

пробовал follow.page вместо followings.pages?

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