很抱歉,如果这是非常明显的,我有点新,但无法在任何地方找到这个答案。
我正在尝试创建一个按钮,在索引视图中将项目数量增加一个。
我有一个包含列的简单表项:| name | brand | type | Quantity |
我的控制器:
def index
@items = Item.all
end
def incr_quantity
Item.find(params[:id]).increment!(:quantity, by = 1)
end
在我看来,我的每个项目旁边都有3个选项:
<% @items.each do |item| %>
<tr>
<td><%= image_tag(item.profile_url(:thumb)) %></td>
<td><%= item.name %></td>
<td><%= item.brand %></td>
<td><%= item.type %></td>
<td><%= item.quantity %></td>
<td><%= link_to 'Edit', edit_item_path(item) %></td>
<td><%= link_to 'Delete', item_path(item), method: :delete, data: {confirm: 'Are you sure?'} %></td>
<td><%= link_to 'Use 1 Item',item_incr_quantity_path(item), method: :post %></td>
</tr>
<% end %>
</table>
您可能已经猜到我收到错误&#34;无法找到没有ID的项目&#34;每当我点击超链接&#34;使用1项&#34;,但我无法弄清楚如何传递他们点击的索引表中项目的特定项目ID。
正如所指出的那样:我应该包含我的路线文件以帮助更好地回答这个问题:
resources :items do
post "incr_quantity"
end
并且请求看起来像这样:
Parameters:
{"_method"=>"post",
"authenticity_token"=>"XXXXXXXXXX",
"item_id"=>"3"}
答案 0 :(得分:3)
查看您定义指向item_incr_quantity_path (item)
的链接的方式,我确信您已为incr_quantity
定义了以下内容的路由:
resources :items do
post "incr_quantity"
end
这将为incr_quantity
操作创建一条路线,如下所示:
item_incr_quantity POST /items/:item_id/incr_quantity(.:format) items#incr_quantity
您可以通过运行rake routes
命令来验证。
在这种情况下,您应该使用params[:item_id]
而不是params[:id]
。
def incr_quantity
Item.find(params[:item_id]).increment!(:quantity, by = 1)
end