如果我在两个模型之间有has_and_belongs_to_many
关系,比如说Users
and Accounts
,我是否可以要求 aUser
至少有一个Account
,以及如何?
此外,使用has_and_belongs_to_many
关系,是否有可能Account
没有 a User
?
我需要的是一种Accounts
可以独立生活并属于的关系,但如果与某人签约Billers
,他们也可以属于。这可能吗,怎么做?Users
User
如果我在两个模型之间有has_and_belongs_to_many
关系,比如说Users
and Accounts
,我是否可以要求 aUser
至少有一个Account
,以及如何?
此外,使用has_and_belongs_to_many
关系,是否有可能Account
没有 a User
?
我需要的是一种Accounts
可以独立生活并属于的关系,但如果与某人签约Billers
,他们也可以属于。这可能吗,怎么做?Users
User
我个人会放弃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
要验证至少一个关联的存在,您可能需要使用自定义验证方法,例如
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
并引入连接模型。