轨道使一个模型需要另一个模型



如果我有两个模型之间的has_and_belongs_to_many关系,假设UsersAccounts,我可以要求一个User至少有一个Account吗?

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

我需要的是一段关系,Accounts可以独立生活,属于Billers,但如果User签约,他们也可以属于Users。这可能吗,如何?

我个人会放弃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 关系做到这一点,你必须将其更改为has_many :through并引入连接模型。

相关内容

  • 没有找到相关文章

最新更新