我正在尝试为我的商品添加“添加到购物车”方法。
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"
'第一',因为友好的身份。
我做错了什么?
答案 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 %>