当我在视图中单击由以下代码生成的链接时:
<%= 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
路由器是否应该找到创建协作的路径?
答案 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 :使用表单创建关系,因为链接不起作用:)