没有路线匹配行动

时间:2014-08-14 11:20:00

标签: ruby-on-rails ruby ruby-on-rails-3.2 routes

我正在购买带有gem的购物车:gem act_as_shopping_cart(https://github.com/crowdint/acts_as_shopping_cart

这个宝石没有很好的文档,但很受欢迎。

在我的操作add_item中我收到错误:

没有路线匹配{:action =>" add_item",:id => nil,:controller =>" comprar"}

这是我对物品的控制器:

CLAS

s ComprarController < SuperSiteController
  def index
    @v = Video.order('created_at asc')
    @n = News.all
    @cat = Category.all
  end

  def show
    @v = Video.find(params[:id])
    @n = News.all
    @cat = Category.all
    @cart = Cart.new
  end

  def add_item
    @cart = Cart.create
    @product = Video.find(params[:id])

    @cart.add(@product, @product.week_price)
  end

end

模型到我的购物车:

class Cart < ActiveRecord::Base
    attr_accessible :id, :owner_id, :owner_type, :quantity,
              :item_id, :item_type, :price


    acts_as_shopping_cart_using :video
  end

要销售的商品的型号:

class Video < ActiveRecord::Base
    attr_accessible :active, :desc, :embed, :img1, :img1_uid, 
            :img2, :img2_uid, :img3, :img3_uid, :img4, 
            :img4_uid, :infos, :month_price, :slug, :title, 
            :trailer, :views, :week_price, :year_price, :category_id



    belongs_to :category

  acts_as_shopping_cart_item_for :cart

end

以及我视图中的代码&#34;显示&#34;:

<% form_for @cart, :url => {:action => "add_item", :id => @cart.id} do |f| %>
       <%= f.submit 'Add to Cart' %>
<% end %>

有人看到的东西我不是吗?

我关注文档,但仍然出现此错误

  

添加项目

     

要将商品添加到购物车,请使用添加方法。你必须发送   对象和对象的价格作为参数。

     

所以,如果你有一个Product类,你会做这样的事情:

@cart = Cart.create
@product = Product.find(1)

@cart.add(@product, 99.99)

谢谢!

5 个答案:

答案 0 :(得分:1)

config/routes.rb

你应该添加

post "comprar/add_item"

您还应该检查您的路线,以确保您拥有所有Comprar路线rake routes

答案 1 :(得分:1)

config/routes.rb文件中,您需要:

resources :comprars do
  collection do
     post 'add_item'
  end
end

答案 2 :(得分:1)

问题在于:

-

<强>路线

  

没有路线匹配{:action =&gt;&#34; add_item&#34;,:id =&gt; nil,   :控制器=&GT;&#34; comprar&#34;}

原因是您的Rails route结构取决于您的:id操作add_item。这就是所谓的member路由,这意味着它需要单个条目。

membercollection路由之间的区别在于集合将从Model检索大量项目(因此不需要id {1}}),而member只会提取一个项目(需要id

目前您的路线需要id购物车item,并且您没有通过它,因此&#34;没有路线&#34;错误。

解决此问题的方法是在您的路线/ id中加入link_to

<%= link_to "Add To Cart", add_item_path(item.id), method: :post %>

-

<强>表格

我知道你想使用表格。为此,我可能会使用此处定义的button_to助手:

<%= button_to "Add To Cart", add_item_path(item.id) %>

这将要求正确的路线,同时保持&#34;形式&#34;您希望实施的功能

答案 3 :(得分:0)

您在表单中使用的@ cart.id在提交时不存在。此外,您还使用此ID查找视频add_item操作。因此,您应该在表单中使用特定的视频ID(@ video.id或类似的东西)。

此外,您的路线文件中也存在一些问题。尝试运行“耙路线”。你应该在结果中有“comprar /:id / add_item”的路由。如果没有,将此路线添加到您的路线文件将解决问题。

答案 4 :(得分:-1)

你的问题在于你的控制器。

ComprarController < SuperSiteController

应该是

ComprarsController < SuperSiteController

在Rails中,控制器名称必须是复数,这是一种约定。

修复该行,然后从

更改文件名
comprarcontroller.rb

comprarscontroller.rb

那应该解决你的问题