我有两个类:User
和Folder
,它们使用has_many :through
来创建many_to_many关系。我需要为这两个类设置别名,以便Subscriber
是User
的别名,Subscription
是Folder
的别名。最后,我想说:
user.subscriptions
和
folder.subscribers
这可行吗?目前我已经定义了一个类似
的联接类SubscriptionSubscriber
class SubscriptionSubscriber < ActiveRecord::Base
belongs_to :subscription , class_name: "Folder"
belongs_to :subscriber , class_name: "User"
end
并将以下代码添加到User
和Folder
class User < ActiveRecord::Base
has_many :subscription_subscribers
has_many :subscriptions, :through => :subscription_subscribers, :class_name => "Folder", :foreign_key => "subscription_id", :source => :folder
end
class Folder < ActiveRecord::Base
has_many :subscription_subscribers
has_many :subscribers, :through => :subscription_subscribers, :class_name => "User", :foreign_key => "subscriber_id", :source => :user
end
这不起作用。例如,如果我运行
user.subscription
我收到以下错误
ActiveRecord::HasManyThroughSourceAssociationNotFoundError:
Could not find the source association(s) :folder in model SubscriptionSubscriber.
Try 'has_many :subscriptions, :through => :subscription_subscribers, :source => <name>'.
Is it one of subscription or subscriber?
任何帮助都将受到高度赞赏。感谢。
答案 0 :(得分:0)
使用:source
,我们告诉Rails在SubscriptionSubscriber模型上寻找一个名为:subscription的关联。
class User < ActiveRecord::Base
has_many :subscription_subscribers, foreign_key: "subscriber_id"
has_many :subscriptions, through: :subscription_subscribers, source: :subscription
end
class Folder < ActiveRecord::Base
has_many :subscription_subscribers, foreign_key: 'subscription_id'
has_many :subscribers, through: :subscription_subscribers, source: :subscriber
end
进行此更改后,立即尝试抓取user.subscriptions