[英]Ruby on Rails: Passing specific .each value into method
對不起,如果這是非常明顯的,我有點新,但無法在任何地方找到這個答案。
我正在嘗試創建一個按鈕,在我的索引視圖中將項目數量增加一個。
我有一個簡單的表項目列:|名稱|品牌|類型|數量|
我的控制器:
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>
你可能已經猜到我每次點擊超鏈接“使用1項”時都會收到錯誤“無法找到沒有ID的項目”,但我無法弄清楚如何在索引表中傳遞項目的特定項目ID他們點擊了。
正如所指出的:我應該包含我的路線文件以幫助解決這個問題:
resources :items do
post "incr_quantity"
end
請求看起來像這樣:
Parameters:
{"_method"=>"post",
"authenticity_token"=>"XXXXXXXXXX",
"item_id"=>"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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.