2012-05-09 4 views
0

중첩 된 양식을 만들고 Ryan Bates Railscast를 사용하고 있습니다. 나는 부분적인 것을 사용하는 전형적인 형식을 만들고있다.부분 및 중첩 된 형식의 Ruby on Rails/Haml 문제

= form_for(@project, :html => { :class => 'addProjectForm' }) do |f| 
    ... 
    %p 
    = f.fields_for :crew_members do |crew| 
     #fields 
     = render 'crew_member_fields', :m => crew 
     = link_to_add_fields "Add Crew Members", f, :crew_members 
    %p 

나는 "필드"클래스를 복제하고이를 내 양식에 추가 할 수있는 도우미 클래스를 호출합니다.

module ProjectsHelper 
    def link_to_add_fields(name, f, association) 
    new_object = f.object.class.reflect_on_association(association).klass.new 
    fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| 
     render(association.to_s.singularize + "_fields", :f => builder) 
    end 
    link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")) 
    end 
end 

헬퍼 클래스는 세부 정보를 처리하기 위해 javascript 함수를 호출합니다. 나는

= link_to_add_fields "Add Crew Members", f, :crew_members 

라인을 추가 할 때

function add_fields(link, association, content) { 
     var new_id = new Date().getTime(); 
     var regexp = new RegExp("new_" + association, "g"); 
     $(link).parent().before(content.replace(regexp, new_id)); 
} 

내 문제는, 내가 오류

undefined local variable or method `m' for #<#<Class:0xa763964>:0xa761588> 

    Extracted source (around line #1): 

    1: = m.label "Crew Member Name" 
    2: = m.label "Crew Member Role" 
    3: %br 
    4: = m.text_field :name 
이는 부분이 빌더 변수를 받고되지 않는 것처럼 보일 수

하지만 경우를 얻을 나는 가지고 있지 않다.

= link_to_add_fields "Add Crew Members", f, :crew_members 

줄을 입력하면 부분 표시가 잘됩니다. 나는 다음에 디버그하는 방법에 대해 혼란 스럽다. 긴 게시물을 보내서 미안하지만 모든 정보를 갖고 싶습니다. 도와 주셔서 감사합니다.

+0

시도해야합니다 : 지역 주민 => {: m => 승무원} –

+0

나는 같은 오류가 발생합니다. – jhamm

+0

예, Rails 3': locals => ..'이있는 권리는 해시를 전달하고': partial =>'을 사용하는 경우에만 필요합니다. 그렇지 않으면 첫 번째 인수가 문자열이고 나머지 인수가 지역이됩니다. –

답변

1

나는 도우미에 오타가 있다고 생각합니다.

module ProjectsHelper 
    def link_to_add_fields(name, f, association) 
    new_object = f.object.class.reflect_on_association(association).klass.new 
    fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| 
     render(association.to_s.singularize + "_fields", :f => builder) 
    end 
    link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")) 
    end 
end 

render(association.to_s.singularize + "_fields", :f => builder)

는 'crew_member_fields를'렌더링 = render(association.to_s.singularize + "_fields", :m => builder)

+0

나는 같은 에러를 얻지 만, m 대신에 f를 알 ​​수 없다. – jhamm

+0

'_crew_member_fields' 부분 코드의 소스 코드를 포함시킬 수 있습니까? – cutalion

+0

또한 이것을 시도해보십시오 :'render (association.to_s.singularize + "_fields", : m => 빌더, f => f)' – cutalion

관련 문제