0

在我的应用程序中, anAccount可以由 aHousehold或 a拥有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
4

2 回答 2

1

我对此有几个想法:

首先,您可以通过将以下内容添加到模型中来表达AccountUser完成的内容:HouseholdAccounts

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

我没有对此进行测试,但我想我会继续分享它,如果我误解了某些东西,我会指望反馈。

于 2013-08-22T05:45:31.220 回答
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 进行身份验证和授权吗?

于 2013-08-22T04:03:45.693 回答