我是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
行从优秀的答案:
- Validate that an object has one or more associated objects
- Rails 3: validate presence of at least one has many through association item
但是当我实现这一行时,然后在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模型上还有其他属性要设置。
1条答案
按热度按时间smtd7mpg1#
一个选项是将验证更改为
然后使用创建用户
编辑:
将
inverse_of
添加到CompanyUser模型也应该可以,验证将保留为validate :company_users, presence: true
: