2012-11-02 2 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 : – Thanh

답변

0

시작하려면 대부분의 코드에서 "순위"모델을 참조하지만 모델 자체는 "BoyScoutRank"라고합니다. 이것이 문제가 될 수 있습니까?

+0

죄송합니다, 나쁜 잘라 내기 및 붙여 넣기 문제를 rank' : _rank'는 accepts_nested_attributes_for는'해야 . 그것은 문제가되지 않습니다. 코드를 편집했습니다. – jhamm

0

Thanh이 지적했듯이 rank 대신 accepts_nested_attributes_for : _rank가 있습니다. 또한 생성시 새로운 Advancement 및 Rank 모델을 생성 할 필요가 없습니다. accepts_nested_attributes가이를 처리해야합니다.

는 (: _rank 문제는 수정 후) : 다음과 같은 일을합니까

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

그것이 내가 생각한 것입니다. 그러나 그것은 주 테이블을 만드는 지원 테이블이 아닙니다. 이것에 대한 이유는 무엇일까요? – jhamm

+0

사용자 인터페이스는 어떻게 생겼습니까?/users에 대한 게시물을 가져올 때 params는 어떻게 생겼을까요? (레일즈 서버 또는 log/development.log의 출력에 있어야합니다). –

관련 문제