我有一个has_many_through
关联,其中User
有许多Project
到ProjectUser
。Rails有一些魔力,允许更新这种关系:
u = User.first
u.update(project_ids: [...])
有没有一种简单的方法可以对create
做同样的事情?
运行User.create(name: ..., project_ids: [...])
失败,并显示Validation failed: Project users is invalid
。
我怀疑这是因为Rails试图在创建User
记录之前创建ProjectUser
记录,并且在连接表上有一些内置的验证,以验证连接的两端都已经存在。ProjectUser
模型没有自定义验证。
class ProjectUser < ApplicationRecord
belongs_to :project
belongs_to :user
end
有没有一个简单的方法来解决这个问题?
3条答案
按热度按时间0vvn1miw1#
所以你必须明确定义
inverse_of
。axzmvihb2#
通常人们使用hmt(而不是
has_and_belongs_to_many
),因为他们有其他的字段,他们有兴趣在连接表中填充,因此人们通常使用连接表创建模型记录的三元组,例如。显然,如果您已经有了一个现有的
User
或Project
,那么您应该使用它们,而不是创建新的。2w3kk1z53#
我认为您需要使用
accepts_nested_attributes_for
这一定会帮助您创建与您所期望的项目相关联的用户