【问题标题】:rails link_to using get instead of postrails link_to 使用 get 而不是 post
【发布时间】:2016-03-12 07:19:22
【问题描述】:

我正在为一个班级创建一个网站,我正在尝试使用一个名为“用户”的模型和一个名为“关系”的加入模型来实现一个好友请求功能。我在 user#show 页面上有一个按钮,应该使用关系控制器中的 create 方法添加朋友。这是按钮的代码:

<%= link_to "Add as Friend", relationships_path(:friend_id => @user), method: :post %>

但是,当我按下链接时,它会尝试访问 index 方法。在控制台中查看后,看起来该链接正在发送一个 GET 请求,该请求路由到 index 方法,而不是一个 POST 请求,该请求路由到 create 方法。有人可以解释为什么会发生此错误以及如何解决它吗?

编辑:根据要求,这是我的路线:

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

【问题讨论】:

  • 你在routes.rb中添加了这个路径吗?我认为您尝试访问的链接是:/relationships/:friend_id
  • 请发布您的 routes.rb 文件
  • 我已经添加了路由文件中的内容。

标签: ruby-on-rails


【解决方案1】:

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

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

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

【讨论】:

  • jquery-ujs 在我的 gemfile 中并且已经安装。我不确定我的资产管道如何。我也尝试过使用按钮,但我得到了同样的错误。
  • @B.Allred 这将有助于查看您所点击页面的完整 HTML,并在您的浏览器中为该页面打开 JavaScript 控制台,看看那里是否有任何错误。
  • 我已经让它工作了。在讲师的建议下,我将按钮的代码更改为: 。谢谢你的建议!
  • 谢谢!我不明白 javascript 正在使用method: 缩小在 link_to 上发布请求的差距。我还没有启动我的 webpacker,所以只是启动另一个控制台并手动运行 ./bin/webpack-dev-server 并重新启动 rails server 让我的所有链接再次工作。
【解决方案2】:

我很确定您匹配了错误的路线。运行 rake routes 并查看链接到 Relationships#create 的路由。

【讨论】:

  • 以下是我运行 rake 路由时出现的情况: 关系 GET /relationships(.:format) 关系#index POST /relationships(.:format) 关系#create
  • 这很奇怪,如果您尝试这样做会发生什么? 或者如果你写一个新的路由,比如 post 'test',to: 'relationships#create' (你应该这样做,但只是为了测试目的)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2010-09-07
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多