簡體   English   中英

Ruby on Rails:link_to調用控制器中的自定義方法-match方法給出錯誤

[英]Ruby on Rails: link_to calls custom method in controller - match method is giving error

我想調用一次調用的方法“ link_to”-更改項目的屬性值。 因此,當用戶為“項目”調用linked_to方法時,該項目的關閉屬性將從item.close = false-> item.close = true更改

<% @items.each do |i| %>
    ...
<%= link_to "Close", item_close_path(:id => i.id) %>
    ...
<% end %>

在我的控制器方法中,我有:

def close
    Item.find(params[:id]).close = true

 #redirect_to index
  end

在我的路線方法中,我有:

match 'items/:id/close' => 'items#close', as: :items_close

我得到的錯誤是:

RuntimeError:如果未指定HTTP方法,則不應在路由器中使用match方法

您必須指定HTTP方法(GET,POST,PATCH,PUT,DELETE等)。 看來您正在嘗試更新自己的商品(盡管它無法正常工作,因為您沒有在此處保存)。 如果是更新,則要使用PATCH或PUT。 我建議使用PATCH進行更新,因為這是Rails約定(請參閱此處 )。

您可以這樣做:

match 'items/:id/close' => 'items#close', via: [:patch, :put], as: :items_close

您也可以使用'patch'而不是'match',如果您僅對此路徑使用PATCH,則此方法更干凈:

patch 'items/:id/close' => 'items#close', as: :items_close

在鏈接中,您還必須指定HTTP方法(如果不是GET),方法如下:

<%= link_to "Close", item_close_path(:id => i.id), method: :patch %>

有關“匹配”的更多信息,請點擊此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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