2

更新:私の質問は答えられましたが、私がこれをどのように行ったかを正確に詳述したブログ投稿を書きました:http: //lathamcity.com/posts/ajaxInRails.html

Rubyオブジェクトに基づいたもののリストを表示するページがあります。私の目標は、Ajax呼び出しを行って新しいRubyオブジェクトを取得し、それに基づいてリストを更新することです。

これを行う方法はパーシャルを使用することだと思いました。リスト全体を、コード内のRailsインスタンス変数を含む部分ファイルにします。次に、Ajax呼び出しで、対応するインスタンス変数を新しいリストに設定し、パーシャルを再レンダリングします。

これが最終目標ですが、今は、インスタンス変数を文字列に設定してから文字列を表示するという、非常に基本的なバージョンを実行しようとしています。

だから私のdivでは、私は持っています:

<% form_tag :action => :go , :method => :get, :remote => true  do %>
    <%= submit_tag "Go" %>
<% end %>

<div id="test"><%= render(:partial => 'test') %></div>

(私のコントローラーの名前)フォルダーに_test.erbファイルがあり、views/interfaceその内容は次の行のみです。

<%= @test %>

そして、私のコントローラーでは、

def go
    @test = "Hello You"
    render :update do |page|
        page.replace_html "test", :partial => "test"
    end
end

これを実行すると、次のようになります。 Missing template interface/update, application/update

よくわかりませんがrender :update、Googleの例で見つけました。

この問題を引き起こしている私は何を間違っているのですか、そしてどうすればそれを修正できますか?私はこれを正しい方法で行っていますか、それともそれを行うためのより良い方法がありますか?

4

1 に答える 1

5

私は両方ともrender :updatereplace_htmlレール3.1で非推奨/削除されたと思います。部分的な更新を行う標準的な方法は、js.erbテンプレートを使用することです。

コントローラで、jsリクエストに応答するようにアクションを指示します。

@test = "Hello you"
respond_to do |format|
    format.js
end

js応答テンプレートapp/views / interface/go.js.erbを作成します。

$('#test').html("<%= escape_javascript(render('test', test: @test})) %>")

<%= test %>これはインスタンス変数ではなくなったため、部分コードをに変更します。むしろ、テストはjs.erbテンプレートから引数としてパーシャルに渡されます。test: @test

于 2012-09-23T17:58:56.403 に答える