簡體   English   中英

Ruby on Rails:將特定的.each值傳遞給方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM