在我的应用中,Account
或Household
可以拥有User
。用户可以访问他们拥有的帐户以及他们家庭拥有的帐户。我已经定义了accessible_accounts
,这给了我一个家庭和用户帐户的数组,但有没有办法获得与关系相同的结果,所以我可以用更多的条件链接它?订单不重要(实际上可以通过进一步链接设置)
class User < ActiveRecord::Base
has_many :accounts, as: :owner
belongs_to :household
def accessible_accounts
ua = accounts.to_a
ha = []
if household
ha = household.accounts.to_a
end
(ua + ha).uniq
end
end
class Household < ActiveRecord::Base
has_many :users
has_many :accounts, as: :owner
end
class Account < ActiveRecord::Base
belongs_to :owner, polymorphic: true
end
答案 0 :(得分:1)
我对此有几点想法:
首先,您可以通过将以下内容添加到Account
模型来表达User
通过Household
所拥有的Accounts
:
has_many :accounts, through: household
但是,我知道您希望Relation
代表用户通过其关联家庭拥有的帐户直接拥有的帐户的合并/联合。如果这是真的,那么我认为添加到User
的以下方法将为您提供所需内容:
def accessible_accounts
Account.where(
'(ownable_id = ? and ownable_type = ?) or (ownable_id = ? and ownable_type = ?)',
id, User.to_s, household_id, Household.to_s)
end
我没有对此进行测试,但我认为如果我误解了某些内容,我会继续分享并依靠反馈。
答案 1 :(得分:0)
在一个适当的多态关联中,我认为你的结构如下:
class User < ActiveRecord::Base
belongs_to :household
has_many :accounts, as: :ownable
end
class Household < ActiveRecord::Base
has_many :users
has_many :accounts, as: :ownable
end
class Account < ActiveRecord::Base
belongs_to :ownable, polymorphic: true
end
顺便说一句,你有没有使用Devise和CanCan进行身份验证的特殊原因吗?授权?