Rails的麻烦有很多关系

时间:2010-03-29 03:46:18

标签: ruby-on-rails ruby models

我正在编写一个应用程序,用户可以创建自己的页面供人们发帖,并关注用户创建的页面上的帖子。这就是我的模特关系目前的样子......

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 newb,所以任何帮助将不胜感激!在发布这个问题之前,我试图尽可能多地搜索这个网站(以及大量的谷歌搜索),但没有什么比我的问题更具体......

3 个答案:

答案 0 :(得分:4)

您已两次定义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

答案 1 :(得分:0)

尝试了follow.page而不是followings.pages?

答案 2 :(得分:0)

关于您的理想,简化的用户模型应该足够了(:应该推断出来源):

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_pa​​ges应该会产生一组页面。