Rails BUILD 方法未通过 has_many 保存关联

Rails BUILD method not saving association on has_many through

我有一个 Rails 应用程序设置如下:

rails g model User name, password, etc....
rails g model Project title, description, etc....
rails g model Contract user:belongs_to project:belongs_to

rake db:migrate

然后在控制台中(为简单起见英文化):

User.create!( params )
x = User.first.projects.build( params )
x.save
User.first.projects.to_a
[]
Project.first
[ project shows ]

保存关联无效。如果我直接使用 User.first.projects.create( params ) 一切正常,但这不是我需要的。

我做错了什么?

您应该在为用户构建 project 后保存 User 对象,而不是项目对象

如果在构建后保存 project 对象,只会创建 Project,但如果保存 User 对象,project 将分配给 User.

User.create!( params )

user = User.first

project = user.projects.build( params )

user.save

现在,您可以查看,

User.first.projects.to_a

[ project shows ]

Project.first

[ project shows ]