2012-11-02 35 views
0

我有3個模型基本上是嵌套的。模型之間的關係無法正常工作

class User < ActiveRecord::Base 
    attr_accessible :birthday, :name 
    has_one :advancement, :dependent => :destroy 
    accepts_nested_attributes_for :advancement 
    attr_accessible :advancement_attributes 
end 

class Advancement < ActiveRecord::Base 
    attr_accessible :user_id, :rank_name 
    belongs_to :user 
    has_one :rank, :dependent => :destroy 
    accepts_nested_attributes_for :_rank 
    attr_accessible :rank_attributes 
end 

class Rank < ActiveRecord::Base 
    attr_accessible :advancement_id, :one_li, :one_pi, :one_date, ... 
    belongs_to :advancement 
end 

這裏是我用來創建我的模型的控制器代碼。

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    @user.advancement = Advancement.new 
    @user.advancement.rank = Rank.new 

    respond_to do |format| 
     format.html # new.html.erb 
    end 
    end 

    def create 
    @user = User.new(params[:user]) 
    @user.advancement = Advancement.new 
    @user.advancement.rank = Rank.new 

    respond_to do |format| 
     if @user.save 
     format.html { redirect_to @user, notice: 'User was successfully created.' } 
     else 
     format.html { render action: "new" } 
     end 
    end 
    end 
end 

在控制檯中,我可以創建和我所期望的一樣的關係。當我嘗試通過瀏覽器完成所有對象的實例化時,外鍵都是正確的,但是如果我嘗試查找user.advancement,我會得到一個缺少錯誤的方法。我是使用新的還是錯誤的,如果是的話,我應該怎麼做?對於代碼數量抱歉,但我不知道任何其他方式來解釋它。

+0

傳遞錯誤的名字,你的'accepts_nested_attributes_for:_rank'應該是'accepts_nested_attributes_for:rank' – Thanh

回答

0

首先,在大多數代碼中,您引用了「排名」模型,但模型本身似乎被稱爲「BoyScoutRank」。這可能是問題嗎?

+0

對不起,壞的剪切和粘貼問題。這不是問題。我編輯了代碼。 – jhamm

0

正如Thanh指出的那樣,您有accep_nested_attributes_for:_rank而不是:rank。你也不應該在你的創作中創建新的進階和等級模型。 accept_nested_attributes應該爲你處理。

請問以下工作(一旦你解決:_Rank問題):

@user = User.new(params[:user]) 
+0

這就是我的想法,但它不是創建支持表,只是主要用戶。這可能是什麼原因? – jhamm

+0

你的用戶形式是什麼樣的?當你把帖子發給/ users時,params是什麼樣子的? (應該在rails server或log/development.log的輸出中)。 –