我正在为一个类创建一个网站,我正在尝试使用名为“Users”的模型和名为“Relationships”的连接模型实现一个朋友请求函数。我在用户#show页面上有一个按钮,它应该通过在Relationships控制器中使用create方法添加朋友。这是按钮的代码:
<%= link_to "Add as Friend", relationships_path(:friend_id => @user), method: :post %>
但是,当我按下链接时,它会尝试访问索引方法。在查看控制台后,看起来链接正在发送GET请求,该请求路由到索引方法,而不是路由到create方法的POST请求。有人可以解释为什么会出现这种错误以及我如何解决它?
编辑:根据要求,这是我的路线中的内容:
Rails.application.routes.draw do
resources :interests
get 'interests/create'
get 'interests/destroy'
get 'home/index'
get 'sessions/create'
get 'sessions/destroy'
resources :users
resources :relationships
resources :subscriptions
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".
# You can have the root of your site routed with "root"
# root 'welcome#index'
root 'home#index'
get "/auth/:provider/callback" => "sessions#create"
get "/signout" => "sessions#destroy", :as => :signout
答案 0 :(得分:7)
使用link_to
帮助程序向Rails表明您希望在HTML中生成a
标记。 HTML specification regarding a
tags的任何元素都不允许生成POST请求。因为Rails了解允许使用链接发出POST
和DELETE
请求的效用,所以它在link_to
帮助程序中提供了这些选项。但是,它的实现必须在引擎盖下使用JavaScript才能正常运行。
检查jquery-ujs is installed,以及您的资产管道是否正常工作,以便以这种方式使用帮助程序。
您还可以评估使用form_for
和button
是否更好,因为它会自动POST
。
答案 1 :(得分:0)
我很确定你选错了路线。运行rake路由并查看链接到Relationships #create的路由。
答案 2 :(得分:0)
在路由助手中使用“ url”而不是“ path”为我解决了这个问题。因此,请使用“ relationships_url”代替“ relationships_path”。