我有一个简单的购物车应用程序,它在应用程序布局的侧边栏上显示带有 line_items 的 session 购物车。我试图在每个订单项的末尾添加一个按钮(在 _line_item.html.erb 中呈现),使用 remote: true 和一些 JS 将购物车中的数量减少一个。但是,当我加载页面时(在我单击任何内容之前),我在开发中收到来自 Rails 3.1 的路由错误,没有安装特殊的 gem 或配置:
Routing Error
No route matches {:action=>"decrement", :controller=>"line_items"}
这是我在 controllers/line_items_controller.rb 中的方法,到目前为止它对我来说一直运行良好:
def decrement
@line_item = LineItem.find(params[:id])
@line_item.quantity -= 1
if @line_item.quantity.empty?
@line_item.destroy
end
respond_to do |format|
format.js {@current_item = @line_item}
end
end
这是 routes.rb 中的条目:
resources :line_items do
member do
post 'decrement'
end
end
这是部分 _line_item.html.erb 中的代码,没有 button_to 链接也能正常工作:
<% if line_item == @current_item %>
<tr id="current_item">
<% else %>
<tr>
<% end %>
<td><%= line_item.quantity %>×</td>
<td><%= line_item.product.title %></td>
<td class="item_price"><%= number_to_currency(line_item.total_price) %></td>
<td><%= button_to 'Remove one', line_item, decrement_line_item_path, remote: true %></td>
</tr>
我一定是遗漏了什么,但我找不到了。似乎一切都是为了我。我究竟做错了什么?非常感谢。
编辑:这是我在使用 decrement_line_item_path(line_item) 时收到的错误:
ArgumentError in Store#index
Showing /Users/Michael/Sites/rails/depot/app/views/line_items/_line_item.html.erb where line #9 raised:
wrong number of arguments (4 for 3)
Extracted source (around line #9):
6: <td><%= line_item.quantity %>×</td>
7: <td><%= line_item.product.title %></td>
8: <td class="item_price"><%= number_to_currency(line_item.total_price) %></td>
9: <td><%= button_to 'Remove one', line_item, decrement_line_item_path(line_item), remote: true %></td>
10: </tr>
最佳答案
decrement_line_item_path
需要单个项目的参数,但您没有给它一个参数。
尝试:
<%= button_to 'Remove one', decrement_line_item_path(line_item), remote: true %>
关于ruby-on-rails - 当 Controller 方法存在、路由已定义且 View 调用它时,为什么我会收到路由错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7700984/