没有路线匹配[GET]

时间:2016-09-22 13:45:04

标签: ruby-on-rails

我正在尝试为我的商品添加“添加到购物车”方法。

items_controller:

def to_cart
  @item = Item.friendly.find(params[:id]) 
  @item.add_to_cart
  redirect_to root_path
end

路线:

resources :items do
  put :to_cart, on: :member
end

模型:

def add_to_cart
  current_user.cart.items << self
  current_user.cart.save
end

显示:

<%= @item.name  %>
<%= link_to 'add to cart', to_cart_item_path(@item) %>

我收到了RoutingError:No route matches [GET] "/items/first/to_cart" '第一',因为友好的身份。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

默认情况下,{/ 1}}会在您的链接中添加method: :put,而rails正在尝试使用GET方法

查找路线
GET

答案 1 :(得分:0)

网络上的链接仅发送GET请求。

要发送POST/PUT/PATCH/DELETE请求,您需要使用表单。

<%= form_for to_cart_item_path(@item), method: :put do |f| %>
  <% f.submit 'Add to cart' %>
<% end %>

Rails为此button_to( 'add to cart', to_cart_item_path(@item) )提供了快捷方式。

Rails UJS驱动程序(不显眼的javascript驱动程序)还提供了一种方法,当链接元素具有data-method属性时,该方法在客户端中创建表单:

<%= link_to 'add to cart', to_cart_item_path(@item), method: :put %>