我想调用曾经调用过的方法“link_to” - 更改项目的属性值。因此,当用户为“item”调用linked_to方法时,该项的closed属性将从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:您不应在路由器中使用
match
方法 没有指定HTTP方法
答案 0 :(得分:3)
您必须指定HTTP方法(GET,POST,PATCH,PUT,DELETE等)。看起来您正在尝试更新您的项目(虽然它不起作用,因为您不在此处保存)。在更新的情况下,您要使用PATCH或PUT。我建议使用PATCH进行更新,因为这是Rails约定(read here)。
你可以这样做:
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 %>