如果我在两个模型之间存在has_and_belongs_to_many
关系,我们说Users
和Accounts
,我是否可以要求User
至少有一个Account
,以及如何?
此外,使用has_and_belongs_to_many
关系,Account
是否可能没有User
?
我需要的是Accounts
可以独立生活并且属于Billers
的关系,但如果Users
注册,它们也属于User
一个人。这有可能,怎么样?
答案 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
并介绍一个连接模型。