ruby has_many的验证检查有问题:通过关联;如何创作?

ugmeyewa  于 2023-01-25  发布在  Ruby
关注(0)|答案(1)|浏览(131)

我是Rails新手,我在确保用户模型中至少存在一个"has_many:through"关系时遇到了麻烦。
我有:

class User < ApplicationRecord
  has_many :company_users, dependent: :destroy
  has_many :companies, through: :company_users

  #validates :company_users, presence: true
end

class Company < ApplicationRecord
  has_many :company_users, dependent: :destroy
  has_many :users, through: :company_users   
end

class CompanyUser < ApplicationRecord
  belongs_to :user
  belongs_to :company
end

我得到了评论validates行从优秀的答案:

但是当我实现这一行时,然后在rails控制台中执行以下操作:

c = Company.create
c.users.create!(email: "test@example.com")

给予

`raise_validation_error': Validation failed: Company users can't be blank (ActiveRecord::RecordInvalid)

从我新手的Angular 来看,似乎HMT条目直到用户创建后才创建,这首先会创建一个阻止用户的验证错误!这可能是一个非常简单的错误,但是我如何让上面的行为与验证一起工作呢?
我试过在几个地方设置inverse_of,但没有成功。
在提到它之前,我有目的地使用HMT而不是HABTM,因为我在company_users模型上还有其他属性要设置。

smtd7mpg

smtd7mpg1#

一个选项是将验证更改为

validates :companies, presence: true

然后使用创建用户

User.create(companies: [Company.create])

编辑:
inverse_of添加到CompanyUser模型也应该可以,验证将保留为validate :company_users, presence: true

class CompanyUser
  belongs_to :user, inverse_of: :company_users
  belongs_to :company
end

相关问题