首页 文章

两个模型之间有多个has_many关系

提问于
浏览
0

用户可以通过三种方式连接到列表:他可以拥有它(即他创建它),他可以是小组成员(他定期投票),或者他可以喜欢它 . 我已经处理了前两种情况,但无法让第三种情况(“收藏”)起作用 . 所有权由List模型上的外键“所有者”的has_many关系处理 . 小组成员通过与联接表lists_users的has_and_belongs_to_many关系来处理 . 我试图通过has_many来做收藏:通过但是它不起作用:

user.rb:

has_many :owned_lists, :class_name => "List", :foreign_key=> :owner  # this is for the owner/list relationship
has_and_belongs_to_many :lists  # for the normal panelist / list relationship
has_many :favorites
has_many :favorite_lists, :through=> :favorites, :class_name => "List"

list.rb:

belongs_to :owner, :class_name=> "User", :foreign_key => :owner
  has_many :favoriters, :through=> :favorites, :class_name => "User"
  has_and_belongs_to_many :users

favorite.rb

class Favorite < ActiveRecord::Base
  belongs_to :list
  belongs_to :user
end

如果一切顺利,我希望能够做user.favorite_lists并获得包含一个或多个列表的关联 . 现在,我得到“ActiveRecord :: HasManyThroughSourceAssociationNotFoundError:找不到源关联:favorite_list或:Favorite_lists in model Favorite . 尝试'has_many:favorite_lists,:through =>:favorites,:source =>'

您可以提供的任何帮助将非常感谢 .

1 回答

  • 0

    您需要为 has_many :through 指定源:

    has_many :favorites
    has_many :favorite_lists, :through=> :favorites, :class_name => "List", :source => :list
    

    我不确定,但我认为这里不需要 :class_name

相关问题