0

如果我在两个模型之间有has_and_belongs_to_many关系,比如说Usersand Accounts,我是否可以要求 aUser至少有一个Account,以及如何?

此外,使用has_and_belongs_to_many关系,是否有可能Account没有 a User

我需要的是一种Accounts可以独立生活并属于的关系,但如果与某人签约Billers,他们也可以属于。这可能吗,怎么做?UsersUser

4

2 回答 2

0

我个人会放弃HABTM。相反,我会使用has_many :though=>

您需要创建两个新模型 account_users 和 account_billers。您可能已经有 HABTM 的连接表,但这会将它们公开为模型,因此它们将需要 ID 字段。

因此,您最终会得到以下内容:

class Account < ActiveRecord::Base
  has_many :account_billers
  has_many :account_users

  has_many :billers, :through=> :account_billers
  has_many :users, :through=> :account_users
end

class User < ActiveRecord::Base
  has_many :account_users
  has_many :accounts, :through=>:account_users

  validates :accounts, :length => { :minimum => 1}
end

class Biller < ActiveRecord::Base
  has_many :account_billers
  has_many :accounts, :through=>:account_billers

  validates :accounts, :length => { :minimum => 1}
end

class AccountUser < ActiveRecord::Base
  belongs_to :user
  belongs_to :account
end

class AccountBiller < ActiveRecord::Base
  belongs_to :biller
  belongs_to :account
end
于 2012-07-12T19:35:24.173 回答
0

要验证至少一个关联的存在,您可能需要使用自定义验证方法,例如

class User < ActiveRecord::Base
  has_and_belongs_to_many :accounts
  validate :require_at_least_one_account

  private
    def require_at_least_one_account
      errors.add(:accounts, "must amount to at least one") if accounts.size < 1
    end
end

(尽管这带来了用户之间如何共享帐户的问题)

对于您的第二个问题,看起来您正在寻找多态关联,但是您不能直接使用 HABTM 关系来做到这一点,您必须将其更改为 ahas_many :through并引入连接模型。

于 2012-07-12T19:35:56.103 回答