Ruby on Railsの新機能です。私はO'Reilly Head First Railsの書籍でいくつかのサンプルアプリケーションを使っています。例の1つでは、3つの部分からなるページがあります。中間の部分は項目のリストです。このセクションのすぐ下にリンクがあり、クリックするとその部分を含むdivが更新されるはずです。この本は、Rails 2.3に基づいた例を実行していると私は信じて、私はRails 3.1を使用しています。Ruby on Rails 3:AJAXコールでdivをlink_toでリフレッシュしない
routes.rbを::
map.connect '/flights/:flight_id/seats', :action=>'flight_seats', :controller=>'seats'
seats_controller.rb:
def flight_seats
@flight = Flight.find(params[:flight_id])
render :partial => "flights/seat_list", :locals => {:seats => @flight.seats}
end
show.html.erb:
<div id="seats">
<%= render :partial=>"seat_list". :locals=>{:seats=>@flight.seats} %>
</div>
<$= link_to_remote("Refresh Seats", :url=>"/flights/#{@flight.id}/seats", method=>"get", :update=>"seats") %>
これは本は私を与えているという例ですこの例では、prototype.jsも使用しています。これは、Rails 2.3に組み込まれているもので、Rails 3にはデフォルトのJavaScriptとしてjQueryが組み込まれていますとしょうかん。 (それが大きな違いになるかどうかは分かりません)
ここまでは私がこれまで持っているものです。これはパーツの内容を正しく取得していますが、AJAX呼び出しが部分的に取得された後は "seat" divを更新していないだけです。私のコード:
routes.rbを:
match 'flights/:flight_id/seats' => 'seats#flights_seats'
seats_controller.rbは:
def flights_seats
@flight = Flight.find(params[:flight_id])
render :partial => "flights/seat_list", :locals => { :seats => @flight.seats }
end
show.html.erb:
<div id="seats">
<%= render :partial => 'seat_list', :locals => { :seats => @flight.seats } %>
</div>
<%= link_to "Refresh Seats", "/flights/#{@flight.id}/seats", :remote => true %>
任意のアイデアは、なぜ私の<div id="seats">
はしません更新された部分をリフレッシュしますか?私はそこに賭けているが、とにかく私は尋ねるだろう、私のコードで何か間違っていますか?
':更新は=>「席」'しませんがjQueryで作業します。 AJAXレスポンスを処理するにはJavaScriptを書く必要があります。 Rails3/jQuery/AJAXには多くの例があります。 –
Ok: ':update'ではなく、独自のカスタムJavaScriptを記述してレスポンスを処理する必要がありますか? ':update'がRails 3で廃止された理由は何ですか?私は理由があると仮定しています。 – ryanpitts1
はい、あなた自身のJavaScriptを書く必要がありますが、それは簡単です。これは、インラインのjavascriptやビューの脆弱なコードを避けるために行われました。 –