Rails使模型需要另一个模型

时间:2012-07-12 19:19:03

标签: ruby-on-rails database-design activerecord model database-relations

如果我在两个模型之间存在has_and_belongs_to_many关系,我们说UsersAccounts,我是否可以要求User至少有一个Account ,以及如何?

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

我需要的是Accounts可以独立生活并且属于Billers的关系,但如果Users注册,它们也属于User一个人。这有可能,怎么样?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

要验证至少一个关联的存在,您可能需要使用custom validation method,例如

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

(虽然这会带来如何在用户之间共享帐户的问题)

对于您的第二个问题,看起来polymorphic associations是您正在寻找的,但您不能直接使用HABTM关系,您必须将其更改为has_many :through并介绍一个连接模型。