Ruby on rails Rails使一个模型需要另一个模型

Ruby on rails Rails使一个模型需要另一个模型,ruby-on-rails,database-design,activerecord,model,database-relations,Ruby On Rails,Database Design,Activerecord,Model,Database Relations,如果我有一个has\u和\u属于两个模型之间的多个关系,比如说用户和帐户,我是否可以要求用户至少有一个帐户,以及如何要求 此外,使用has_和 您需要创建两个新模型,account_用户和account_账单。您可能已经有了HABTM的连接表,但这将把它们公开为模型,因此它们需要ID字段 因此,您将得到如下结果: class Account < ActiveRecord::Base has_many :account_billers has_many :account_users

如果我有一个
has\u和\u属于两个模型之间的多个
关系,比如说
用户
帐户
,我是否可以要求
用户
至少有一个
帐户
,以及如何要求

此外,使用
has_和
关系,
帐户
是否可能没有
用户


我需要的是一种关系,在这种关系中,
账户
可以独立生活,并且属于
账单
,但如果
用户
注册了,它们也可以属于
用户。这有可能吗?怎么可能?

我个人会放弃HABTM。相反,我会使用
has\u many:虽然=>

您需要创建两个新模型,account_用户和account_账单。您可能已经有了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
类帐户:账户\u账单
拥有\u多个:用户,:通过=>:帐户\u用户
结束
类用户:帐户\u用户
验证:帐户,:长度=>{:最小=>1}
结束
类Biller:账户\u账单
验证:帐户,:长度=>{:最小=>1}
结束
类AccountUser
要验证是否存在至少一个关联,您可能需要使用

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
class用户
(尽管这带来了用户之间如何共享帐户的问题)


对于你的第二个问题,看起来像是你正在寻找的,但是你不能直接用HABTM关系来实现这一点,你必须将其更改为
has\u many:through
,并引入一个联接模型。

这将设置一个要求,即用户和账单者都有帐户,但是帐户可以在没有用户或账单的情况下存在。您可以使用多态性,但没有好的方法使用多态性来执行FK约束。如果user1521444还没有很好地掌握模型和关系,我会避免这种情况。有了多态关联,你似乎可以拥有一个属于用户或账单者的帐户,但是,在多态关联下,同一个帐户可以同时属于这两个帐户吗?如果您可以同时拥有属于用户和账单用户的帐户,我认为AR不支持这种开箱即用的方式。你可以检查这个问题