Aliasing with many_to_many relation in Rails 4 -
i have 2 classes: user
, folder
use has_many :through
create many_to_many relationship. need have aliases both classes such subscriber
alias user
, subscription
alias folder
. in end, able say:
user.subscriptions
and
folder.subscribers
is doable? have defined join class subscriptionsubscriber
like
class subscriptionsubscriber < activerecord::base belongs_to :subscription , class_name: "folder" belongs_to :subscriber , class_name: "user" end
and added following code 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
this not working. example, if run
user.subscription
i following error
activerecord::hasmanythroughsourceassociationnotfounderror: not find source association(s) :folder in model subscriptionsubscriber. try 'has_many :subscriptions, :through => :subscription_subscribers, :source => <name>'. 1 of subscription or subscriber?
any highly appreciated. thanks.
with :source
, we're telling rails association called :subscription on subscriptionsubscriber model.
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
after making change, try fetching user.subscriptions
Comments
Post a Comment