新手问题:未定义的局部变量或方法,为什么?

时间:2010-12-30 12:51:13

标签: ruby-on-rails ruby-on-rails-3

我是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

2 个答案:

答案 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应用程序解决方案是什么? ?