我正在购买带有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)
谢谢!
答案 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
路由,这意味着它需要单个条目。
member
和collection
路由之间的区别在于集合将从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
那应该解决你的问题