2016-05-31 3 views
0

렌더링 nested_form코쿤은 무한 루프 :(</p> <p>모델을 생성, has_many 질문을 질문, 자신에게 내가 고치 자신을 호출하는 형태를 만들려고 해요

class Question < ActiveRecord::Base 
    has_many :questions,:foreign_key => "parent_id", :dependent =>:destroy 
    belongs_to :basic_component 

    attr_accessible :description, :questions_attributes, :questions 

end 

내 질문 _form

<%= semantic_form_for [:admin, @question] do |f| %> 
    <%= f.inputs do %> 
    <%= f.input :description %> 
    <div class="questions"> 
     <%= f.semantic_fields_for :questions do |question| %> 
      <%= render 'question_fields', :f => question %> 
     <% end %> 
     <div class="links"> 
     <%= link_to_add_association("Nova Pergunta", f, :questions, class: 'button') %> 
     </div> 
    </div> 
    <% end %> 
    <%= f.actions %> 
<% end %> 

내 _question_fields

<div class="nested-fields"> 
    <%= f.inputs do %> 
    <%= f.input :description} %> 
    <div class="questions"> 
     <%= f.semantic_fields_for :questions do |question| %> 
     <%= render 'question_fields', :f => question %> 
     <% end %> 
     <div class="links"> 
     <%= link_to_add_association("Nova Pergunta", f, :questions, class: 'button') %> 
     </div> 
    </div> 
    <% end %> 
</div> 

무한 루프 :(해결 방법? 질문 필드에서

Rendered admin/questions/_question_fields.html.erb (168.4ms) 
    Rendered admin/questions/_question_fields.html.erb (376.2ms) 
    Rendered admin/questions/_question_fields.html.erb (586.4ms) 
    Rendered admin/questions/_question_fields.html.erb (780.2ms) 

답변

0

link_to_add_association도 서버 측에서 중첩 된 양식을 미리 렌더링하므로 링크를 클릭하면 "새"항목을 삽입 할 수 있습니다.

당신이 정말로 원하는 경우)하며 link_to_add_association 또한 중첩 된 형태 또한 link_to_add_association ... 무한히를 렌더링하는 중첩 된 형식을 렌더링 : 당신의 무한 루프가 어디에서 오는지

그래서 즉 무기한/무제한 나무를 만들 수 있어야, 누에 고치는 당신을위한 도구가 아닙니다. 당신은 아약스 사용에 의지해야 할 것입니다.

그러나 최대 깊이를 제한 할 수있는 경우 레벨이 최대 레벨보다 낮 으면 link_to_add_association 만 렌더링하는보기에 추가 매개 변수를 추가하는 것이 더 쉽습니다.

이것은 누에 고치 문제에 이전에 도달했습니다, 그리고 가능한 솔루션은 (가독성 HAML) 같은 것을 할, 최대 깊이가 5 가정, 짧은에서 demonstrated

이었다

= semantic_form_for [:admin, @question] do |f| 
    = f.inputs do 
    = f.input :description 
     .questions 
     = f.semantic_fields_for :questions do |question| 
      = render 'question_fields', f: question, depth: 0 
     .links 
     = link_to_add_association "Nova Pergunta", f, :questions, 
      class: 'button', render_options: {locals: {depth: 0}} 
    = f.actions 
하지만 클릭 할 때

depth에 대한 question_fields 부분 다음 테스트 (및 전파)

.nested-fields 
    = f.inputs do 
    = f.input :description 
    .questions 
     = f.semantic_fields_for :questions do |question| 
     = render 'question_fields', :f => question, depth: depth + 1 
    - if depth < 5 
     .links 
     = link_to_add_association "Nova Pergunta", f, :questions, 
      class: 'button', render_options: {locals: {depth: depth + 1}} 
+0

감사합니다. –

0

, 당신은이 : 루프의 원인이되는

<%= f.semantic_fields_for :questions do |question| %> 
    <%= render 'question_fields', :f => question %> 
<% end %> 

. 파일에 들어 있기 때문에이 파일을 계속 호출하고 있습니다.

+0

그래, 그레이엄, 그 싶습니다 새 폼을로드하고 트리를 만들려면 클릭하십시오.하지만 클릭하기 전에 말한대로 렌더링을 호출하면 해결 방법을 알 수 있습니까? JavaScript를 작성해야합니까? 감사합니다 –

관련 문제