2011-10-25 15 views
1

私はRailsの2から、このAjax呼び出しに苦しんでいます:Rails3でこのAjaxを呼び出す方法は?

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

は、どのように私はRailsの3でこれを表現することができますか?

おかげで、

+0

私はこれを試しました:link_to_function name、 "task" do | page | しかし、これは、 "onclick"属性の中にいくつかのJSコードを与えて、 – poseid

答えて

0

のGithubで、このプロジェクトにいくつかのヒントがあります: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 

はさらに、私が考える

https://github.com/ryanb/complex-form-examples/blob/master/app/models/survey.rb

1

に示すようaccepts_nested_attributes_for使用することが重要です代わりにlink_to:remote => trueを使用することもできます。 link_to_functionは、onclick属性に入れたJavaScriptコードの文字列を受け入れるためのものです。だからではなく、あなたのヘルパーメソッドの、そして、あなたの新しいアクションで、あなたは.jsファイルをブロックするように応じる追加する必要が

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

のようなものを使用。

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/私は、Railsでリモートのコーディング例をlink_toにたくさんしないと認めなければならない。私が行うほとんどのAJAX呼び出しは、JSON応答を使用しています。そこで私は、資産パイプラインの下にjsコードを書いています。

+0

と何をすればよいのか分かりません。これはHTMLの通常のスニペットを読み込むための素敵な要約です。私がいる状況では、フォームの残りの部分と "同期"しなければならない入力フィールドを使用します。以下の解決策を完全に理解するには、まだAjaxについてもう少し学ぶ必要があります。フィードバックありがとうございます。 – poseid

+0

これを正しく読んだら、その場でフォームにフィールドを追加したいのですか?それでは、上記のコードをそのまま使用して調整することができます。本文に追加するのではなく、フォームタグに追加します。必要なフィールドを含む別の部分を作成します。 new.js.erbファイルで部分名を参照するだけです。 – agmcleod

関連する問題