Rails为Ajax的使用提供了相当简单的方法,见过实验一下代码有效。仅记备忘。
详细理论见《Web开发敏捷之道-应用Rails进行敏捷开发(第三版)》 Page 95 ~ 97
我的RoR环境如下:
Rails 2.3.14
Ruby 1.8.7
一、替换button_to生成代码的post形式
depot\app\views\store\index.html.erb
<% form_remote_tag :url => {:action => 'add_to_cart', :id => product} do%>
<%= submit_tag "Add to cart"%>
<%end%>
二、add_to_cart方法做出改变发送ajax请求
\depot\app\controllers\store_controller.rb
def add_to_cart
product = Product.find(params[:id])
@cart = find_cart
@cart.add_product(product)
respond_to do |format|
format.js
end
rescue ActiveRecord::RecordNotFound
logger.error("Error #{params[:id]}")
redirect_to_index "Error"
end
三、添加Ajax支持
depot\app\views\layouts\store.html.erb
<head>
<title>XXXX Book Store</title>
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/1.4.0/bootstrap.css">
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/docs.css">
<%= javascript_include_tag :defaults %>
</head>
四、添加js响应
depot\app\views\store\add_to_cart.js.rjs
page.replace_html("cart", :partial=>"cart", :object=>@cart)