没有路由匹配路由文件中声明的资源上的[GET]

时间:2013-03-16 07:26:02

标签: ruby-on-rails routes

当我在视图中单击由以下代码生成的链接时:

<%= link_to "Colleague", collaborators_path(member2_id: user.id,), :method => :post %>

我收到以下错误消息:

No route matches [GET] "/collaborators"

但是,我的路线文件中有以下行:

resources :collaborators, only: [:create, :destroy]

我在collaborators_controller中写了以下定义:

  @collaboration = current_user.collaborations.build(:member2_id => params[:member2_id])
      if @collaboration.save
        flash[:notice] = "Added collaborator."
        redirect_to root_url
      else
        flash[:error] = "Unable to add collaborator."
        redirect_to root_url
      end

路由器是否应该找到创建协作的路径?

2 个答案:

答案 0 :(得分:1)

这是因为您使用的是only: [:create, :destroy]。您需要在该数组中包含:index才能生成GET /collaborators路由。请参阅Rails guide on Routing

要使用与:method => :post的链接,您需要使用Rails 3的unobtrusive Javascript功能。

答案 1 :(得分:1)

由于您使用的是链接,因此:method => :post似乎被忽略了。提交表单时通常使用POST方法。实际上,POST方法用于将数据从浏览器发送到服务器,以便将新记录添加到数据库。有关详细信息,请参阅Wikipedia article on HTTP methods,另请参阅Rails Guides on Routing

如果您要做的是将某人添加为同事(就像Twitter的“关注”操作,或Facebook的“喜欢”),那么您需要在隐藏字段中创建一个带有用户ID的小表单。

TL; DR :使用表单创建关系,因为链接不起作用:)