Ruby on Rails:link_to在控制器中调用自定义方法 - 匹配方法给出错误

时间:2015-04-08 17:30:54

标签: ruby-on-rails ruby-on-rails-4

我想调用曾经调用过的方法“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方法

1 个答案:

答案 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 %>

More info on 'match' here