2012-03-06 20 views
2

私はRuby on Rails 3にCRUDアプリケーションを設定しました。私はここにいくつかのajaxを追加する必要があります。私の最初の要件は、新しいフォームリンクをクリックすると、カスタマイズされたフォームを取得することです。これは、この時点で私が持っているリンクです:Rails 3でAjaxリクエストからの応答を処理するにはどうすればよいですか?

私は新しい本のアクションに以下の調整を行った私のコントローラについて
<%= link_to 'New Book', new_book_path(:subject_id=>@subject.id), :remote=>true %> 

def new 
    @book = Book.new 
    if params[:subject_id].to_i >0 then 
     @book.subject_id = params[:subject_id] 
    end 

    if request.xhr? 
     respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @book } 
     render :layout => false, :file=>'app/views/books/_form' 
     return false 
     end 
    else 
     respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @book } 
     end 
    end 
    end 

私は放火魔にチェックされ、生成されたリンクをクリックしますフォームhtmlを返しますが、レスポンスをどのように処理するかわかりません。助けてください。

+1

あなたはJavaScriptで応答を処理する必要があります:jQueryのは、あなたが部分的(HTML)サイトにあなたのコントローラによってレンダリングを挿入したい場合は、この(未テスト)のようなものを持つことができます。あなたのAjaxの部分はどのように見えますか?コードを追加できますか? – auralbee

+0

私がやったことは、リモートパラメータを追加することです - それ以上はありますか?私はここにレールの初心者です。 – Ali

答えて

1

代わりにHTMLで応答のこの

$("#idname").append(<%= render "form" %>) 

それがレンダリングする方法のようなものかもしれないあなたの.js.erbファイル内の.js

で応答し、フォームのHTMLを返すだけでなく、JSを与えますHTMLを追加するコード。

+0

私はerb jsファイルを設定していませんか?私はレール3には全く新しいです。どこでこれを設定しますか? – Ali

+0

PHPでプラス私は通常、JSONエンコードされたオブジェクトに私のhtmlと他の変数を囲み、javascriptの応答ハンドラでデータを処理します。どのようにこれをレール上のルビーでエミュレートすることができますか?それを行うための良い方法がありますか? ajaxクエリで生のhtmlを返すのは良い考えですか? – Ali

+0

正しい道と間違った道があるかどうかはわかりませんが、私はかなり評判の良い情報源が両方の道を行くのを見ました。そして、私はjsを提供する前にルビーをコンパイルするように.js.erbを意味して申し訳ありません。 –

0

もちろん、Railsで生成されたJavaScriptに頼ることはできますが、私はいつも自分のJavaScriptコードに対して「より多くの制御」をしたいと思っています。例えば。

$("#new-book-button").click(function() { 
    $.get('books/new', function(data) { 
    $('#some-form-container').html(data); 
    }); 
} 
関連する問題