2012-01-14 26 views
0

我有三個模型建立與以下關聯.build方法連接表中沒有創造協會

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

你可以顯示你的current_user方法嗎? – Msencenb 2012-01-14 08:14:10

+0

我正在使用devise – 2012-01-14 08:18:56

+0

您能否顯示創建操作發生時會發生什麼的日誌? – Msencenb 2012-01-14 08:45:39

回答

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語法在沒有指定faculties記錄的ID的情況下使用。請記住兩件事:1)ActiveRecord本身不支持組合主鍵,2)您必須在使用#build創建的關聯記錄上調用#save。如果你記得這些,你應該沒問題。

1

構建方法不保存對象。你需要明確地呼叫@ school.save。

+0

已經嘗試過了,關於這個協會還沒有運氣。 – 2012-01-14 08:13:46