2011-10-25 2 views
1

나는 레일 2에서이 Ajax 호출로 고민하고 있습니다 :Ajax에서 Rails3을 호출하는 방법?

 
    def add_task_link(name) 
     link_to_function name do |page| 
     page.insert_html :bottom, :tasks, :partial => 'task', :object => Task.new 
     end 
    end 

어떻게 레일 3이 표현 할 수 있습니까?

감사합니다,

+0

나는 이것을 시도했다 : link_to_function name, "task"do | page | 그러나 이것은 "onclick"속성에 일부 JS 코드를 제공합니다.이 코드는 – poseid

답변

1

같이 https://github.com/ryanb/complex-form-examples

 
    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, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")") 
    end 

또한,이 accepts_nested_attributes_for 사용하는 것이 중요합니다 대신 link_to : remote => true를 원할 수 있습니다. link_to_function은 onclick 속성에 넣는 자바 스크립트 코드 문자열을 받아들입니다. 따라서 도우미 메서드 대신 다음을 사용하십시오.

<%= link_to 'My Link', new_task_path, :remote => true %> 

그런 다음 새 작업에서 .js 응답을 블록에 추가해야합니다.

def new 
    @task = Task.new 
    respond_to do |format| 
    format.html 
    format.js { render :layout => false } # add this line 
    end 
end 

그런 new.js.erb라는 응용 프로그램/뷰/작업에서 파일을 생성하고, 추가

$('body').append('<%= escape_javascript(render :partial => "form", :locals => { :task => @task }) %>'); 

이 부분 양식을 제공 설정은 당신이 당신의 new.html.erb에 대한 어쨌든 사용할 수있는 (하고 edit.html.erb 파일). 이 예제 저장소에서 몇 가지 예제를 보았습니다. https://github.com/nu7hatch/rails3-ujs-example/blob/master/ 레일즈에서 원격 코딩 예제를 많이 사용하지는 않습니다. JSON 응답을 사용하는 대부분의 아약스 호출. 따라서 js 코드를 자산 파이프 라인 아래에 작성합니다.

+0

과 관련하여 HTML의 일반 스 니펫을로드하는 데 유용한 요약 정보입니다. 내가 속한 상황은 나머지 양식과 "동기화"되어야하는 입력 필드를 사용합니다. 아래의 솔루션을 완전히 이해하려면 Ajax에 대해 더 자세히 알아야합니다. 의견에 감사드립니다. – poseid

+0

올바르게 읽으면 폼에 필드를 추가하고 싶습니까? 그런 다음 위 코드를 그대로 사용할 수 있습니다. 본문에 추가하는 대신 양식 태그에 추가하십시오. 필요한 필드가 포함 된 다른 부분을 만듭니다. new.js.erb 파일에서 부분 이름을 참조하기 만하면됩니다. – agmcleod

관련 문제