我是Ruby on Rails的新手,我正在研究O'Reilly Head First Rails一书中的一些示例应用程序。在一个示例中,存在由三个部分组成的页面。中间部分是项目列表。在此部分下方有一个链接,当单击时,应该刷新包含该部分的div。这本书是基于Rails 2.3运行的例子,我相信我正在使用Rails 3.1。这是本书给我的例子:
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将jQuery作为默认的JavaScript库。 (不确定这是否会产生很大的影响)
这是我到目前为止所拥有的。这是正确获取部分内容,它只是在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">
不会刷新更新的部分?我打赌有,但无论如何我会问,我的代码有问题吗?
答案 0 :(得分:2)
:remote =&gt;如果您不返回JSON数据,则true选项有点奇怪。但是,您可以将HTML包装在JSON对象中,这正是我通常所做的。或者,如果您想要更接近现有代码的东西,这样的东西应该适合您:
<%= link_to "Refresh Seats", "/flights/#{@flight.id}/seats", :class => "refresh-seats" %>
在你的javascript中:
$(document).delegate(".refresh-seats", "click", function(e){
e.preventDefault();
$("#seats").load(this.href);
});