我是Rails的新手(我正在使用Rails 3.0.3),目前我正在阅读“使用Rails进行Agile Web开发”一书来开发一个简单的rails应用程序。
我跟着这本书来:
- 创建一个模型'购物车'类;
- 在我的' store_controller '中实施' add_to_cart '方法,
我有一行代码
<%=button_to "Add to Cart", :action => add_to_cart, :id => product %>
在我的 /store/index.html.erb
如您所见,我的 index.html.erb 中有:action => add_to_cart
,它将调用我的* Controllers / store_controller.rb中的add_to_cart
方法*
但是在刷新浏览器之后,我收到错误“未定义的局部变量或方法'add_to_cart'”,显然我的'store_controller.rb'中有方法add_to_cart
,为什么我得到这个错误???可能的原因是什么?
以下是我的代码:
store_controller.rb
class StoreController < ApplicationController
def index
@products = Product.find_products_for_sale
end
def add_to_cart
product = Product.find(params[:id])
@cart = find_cart
@cart.add_product(product)
end
private
def find_cart
session[:cart] ||= Cart.new
end
end
/store/index.html.erb
<h1>Your Pragmatic Catalog</h1>
<% @products.each do |product| -%>
<div class="entry">
<%= image_tag(product.image_url) %>
<h3><%=h product.title %></h3>
<%= product.description %>
<div class="price-line">
<span class="price"><%= number_to_currency(product.price) %></span>
<!-- START_HIGHLIGHT -->
<!-- START:add_to_cart -->
**<%= button_to 'Add to Cart', :action => 'add_to_cart', :id => product %>**
<!-- END:add_to_cart -->
<!-- END_HIGHLIGHT -->
</div>
</div>
<% end %>
模型/ cart.rb
class Cart
attr_reader :items
def initialize
@items = []
end
def add_product(product)
@items << product
end
end
答案 0 :(得分:1)
在尝试创建Rails3应用程序时,您似乎正在关注本书的旧版本(使用Rails 2编写)。
要简单地添加您需要的路线,请添加
match 'store/add_to_cart/:id' => 'store#add_to_cart'
了解RESTful应用程序更为复杂。基本上,您可以设计应用程序,使其由可以创建,更新,删除,链接等的多种资源组成。
我强烈建议您使用基于Rails3的最新版本的“使用Rails进行Agile Web开发”。它将为您清理(特别是,您将在第124页看到,以RESTful方式向购物车添加项目的管理方式不同)。
答案 1 :(得分:0)
我通过推荐
解决了我的问题# This is a legacy wild controller route that's not recommended for RESTful applications.
# Note: This route will make all actions in every controller accessible via GET requests.
match ':controller(/:action(/:id(.:format)))'
Configuration / routes.rb 下的
然后,还有一个问题我想问一下,正如上面的配置所说,对于RESTful应用程序不建议 ,那么这个问题的RESTful应用程序解决方案是什么? ?