.build方法不在连接表中创建关联

时间:2012-01-14 08:00:49

标签: ruby-on-rails ruby-on-rails-3.1

我有三个模型设置,具有以下关联

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显示成功,但该关联不构建在连接表上。

我在应用程序控制台中尝试了它,它可以很好地构建关联。

我已经被困在这几天了,我无法弄清楚我错过了什么。提前感谢任何和所有建议

2 个答案:

答案 0 :(得分:1)

构建方法不保存对象。你需要明确地调用@ school.save。

答案 1 :(得分:0)

两件事:如果schools关联是:throughhas_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。如果你记得这些,你应该没事。