Rails 2:でこのようなsthを行うことができます
def show_rec_horses
rec_horses = Horses.find(:all)
page["allHorses"].replace_html :partial => "horses/recommended", :locals =>
{:rec_horses => rec_horses}
end
Rails3でjQueryを使用してこれを行うにはどうすればよいですか。では、Rails3でdivのhtmlをajax call(link_to:remote => true)を介して部分的に置き換えるにはどうすればよいですか?.
私は(私のshow_rec_horses.js.erbで)次のようにsthを試しました:
$("#interactionContainer").update("<%= escape_javascript(render("horses/recommended"))%>");
そして、何も起こりません。他のバリエーションをいくつか試しましたが、うまくいきませんでした。何が悪いのですか?これは他の方法でアプローチする必要がありますか?どんな答えでも大歓迎です。
さて、コントローラーから始めましょう。
def show_rec_horses
@rec_horses = Horses.find(:all)
respond_to do |format|
format.html # show_rec_horses.html.erb
format.js # show_rec_horses.js.erb
end
end
これにより、htmlリクエストまたはjavascriptリクエストのいずれかに対して正しいテンプレートがレンダリングされていることが確認されます。 javascriptリクエストに応答する必要があるだけの場合は、html部分を削除してください。
ここで、次の内容を含むページがあるとします。
<p><%= link_to 'Show Horses', show_rec_horses_path, remote: true %></p>
<div id="interactionContainer"></div>
リンクをクリックすると、コントローラーのshow_rec_horsesアクションが要求されます。このアクションにより、javascriptファイルがshow_rec_horses.js.erb
になります。
このjavascriptファイルには、次のようなものが含まれている必要があります。
$('#interactionContainer').html('<%=j render partial: 'horses/reccommended', locals: { rec_horses: @rec_horses } %>')
これで、コンテナはhorses/_reccommended.html.erb
のコンテンツで満たされます。これには、たとえば次のものが含まれます。
<% rec_horses.all.each do |rec_horse| %>
<p><%= rec_horse.name %></p>
<% end %>