1

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

<%= 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

那么创建协作的路径不应该被路由器找到吗?

4

2 回答 2

1

这是因为您正在使用only: [:create, :destroy]. 您需要包含:index在该数组中才能有一条GET /collaborators路线。请参阅有关路由的 Rails 指南

为了使用与 的链接:method => :post,您需要使用 Rails 3 的不显眼的 Javascript功能。

于 2013-03-16T07:27:55.080 回答
1

看起来:method => :post因为您正在使用链接而被忽略。提交表单时通常使用 POST 方法。实际上,POST 方法用于将数据从浏览器发送到服务器,以便将新记录添加到数据库中。有关更多信息,请参阅有关 HTTP 方法的 Wikipedia 文章,以及有关路由的 Rails 指南

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

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

于 2013-03-16T17:35:33.660 回答