rails link_to使用get而不是post

时间:2015-12-07 15:56:02

标签: ruby-on-rails

我正在为一个类创建一个网站,我正在尝试使用名为“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

3 个答案:

答案 0 :(得分:7)

使用link_to帮助程序向Rails表明您希望在HTML中生成a标记。 HTML specification regarding a tags的任何元素都不允许生成POST请求。因为Rails了解允许使用链接发出POSTDELETE请求的效用,所以它在link_to帮助程序中提供了这些选项。但是,它的实现必须在引擎盖下使用JavaScript才能正常运行。

检查jquery-ujs is installed,以及您的资产管道是否正常工作,以便以这种方式使用帮助程序。

您还可以评估使用form_forbutton是否更好,因为它会自动POST

答案 1 :(得分:0)

我很确定你选错了路线。运行rake路由并查看链接到Relationships #create的路由。

答案 2 :(得分:0)

在路由助手中使用“ url”而不是“ path”为我解决了这个问题。因此,请使用“ relationships_url”代替“ relationships_path”。