2010-01-11 3 views
0

내 Ruby on Rails 응용 프로그램에서 관련 모델이있는 중첩 모델을 추가/편집 할 수 있습니다. 인수를 위해서 중첩 된 모델에 대한 연결을 만드는 방법

model Survey 
    string title 
    has_many questions 

model Question 
    string question 
    belongs_to category 

model Category 
    string name 

는의 사용자가 항상 질문 (나는 한숨, 더 나은 예를 가지고 올 수없는)을 입력 할 때 새로운 카테고리를 입력해야한다고 가정하자.

내 모델/survey/edit.html.erb에 질문을 추가하고 저장하기위한 작업 설정이 있습니다. 그러나 그림에 Category 모델을 추가하면 새로운 Question을 추가 할 때 Category 이름 필드가 표시되지 않는 문제가 발생합니다. 나는 그것이 Question.new를 호출하더라도 question.category.build를 호출하지 않기 때문에 이것이 의심 스럽다. 그리고 나는 어디에서 어떻게해야하는지 모른다.

내 edit.html.erb :

<h1>Editing Survey</h1> 

<%= render :partial => 'form' %> 

내 _form.html.erb :

<% form_for(@survey) do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </p> 

    <div id="questions"> 
    <% f.fields_for :questions do |q| %> 
     <%= render :partial => 'question', :locals => { :pf => q } %> 
    <% end %> 
    </div> 

    <%= add_a_new_child_link("New question", f, :questions) %> 
<% end %> 

내 _question.html.erb : 대한

<div class="question"> 
    <%= pf.label :question %> 
    <%= pf.text_field :question %> 

    <% pf.fields_for :category do |c| %> 
    <p> 
     <%= c.label :name, "Category:" %> 
     <%= c.text_field :name %> 
    </p> 
    <% end %> 
</div> 

답변

0

빠른 수정 당신의 상황은 가상 속성을 사용하는 것입니다. 귀하의 질문 모델 EG는 :

당신의 _question에서
def category_name=(new_name) 
if category then 
    category.name = new_name 
else 
    category = Category.new(:name => new_name) 
end 
end 

def category_name 
    return category.name if category 
    "" 
end 

, 필요가 중첩 된 형태가 사용 없습니다. 그냥 같은 것을 추가하십시오 :

<%= pf.text_field :category_name %> 

나는 그것을 테스트하지 않았지만 당신은 아마 ideea를 잡았을 것입니다.

+0

실제로 Question를 대신하여 문제를 직접 수정했습니다. 새로운 JS 생성기 함수에 질문을 보내기 전에 question.category.build를 수행해야했습니다. 그러나 나는 당신의 생각이 훨씬 더 마음에 듭니다. – Steve

관련 문제