我有三个模型设置,具有以下关联
class User < ActiveRecord::Base
has_many :faculties
has_many :schools, :through => :faculties
end
class School < ActiveRecord::Base
has_many :faculties
has_many :users, :through => :faculties
end
class Faculty < ActiveRecord::Base
belongs_to :user
belongs_to :school
end
在我的控制器中,我去创建一所学校并指派用户
class SchoolsController < ApplicationController
def create
@school = current_user.schools.build(params[:school])
...
end
end
当我登录并提交表单时,flash显示成功,但该关联不构建在连接表上。
我在应用程序控制台中尝试了它,它可以很好地构建关联。
我已经被困在这几天了,我无法弄清楚我错过了什么。提前感谢任何和所有建议
答案 0 :(得分:1)
构建方法不保存对象。你需要明确地调用@ school.save。
答案 1 :(得分:0)
两件事:如果schools
关联是:through
和has_many
关联,则必须选择School
通过哪个父关联。
因此,举例来说,如果您要School
users
下的/users/:id/faculties/:id
资源,可以current_user.faculties.find(params[:faculty_id]).schools.build(params[:school]).save
has_many xxx, :through
创建学校。{/ 1}}
基于示例代码,看起来基本问题是使用faculties
语法而未指定{{1}}记录的id。请记住两件事:1)ActiveRecord本身不支持复合主键,2)您必须在使用#build创建的关联记录上调用#save。如果你记得这些,你应该没事。