Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 试图创建POST请求,但未获得路由匹配[GET]_Ruby On Rails 3_Http Post_Ruby On Rails 3.1 - Fatal编程技术网

Ruby on rails 3 试图创建POST请求,但未获得路由匹配[GET]

Ruby on rails 3 试图创建POST请求,但未获得路由匹配[GET],ruby-on-rails-3,http-post,ruby-on-rails-3.1,Ruby On Rails 3,Http Post,Ruby On Rails 3.1,我正在尝试执行类似的操作,但遇到了无路由错误: 在Ryan的routes.rb文件中: post "versions/:id/revert" => "versions#revert", :as => "revert_version" 在他使用路由的控制器中,versions\u controller.rb link = view_context.link_to(link_name, revert_version_path(@version.next, :redo =

我正在尝试执行类似的操作,但遇到了无路由错误:

在Ryan的
routes.rb
文件中:

    post "versions/:id/revert" => "versions#revert", :as => "revert_version"
在他使用路由的控制器中,
versions\u controller.rb

    link = view_context.link_to(link_name, revert_version_path(@version.next, :redo => !params[:redo]), :method => :post)
    redirect_to :back, :notice => "Undid #{@version.event}. #{link}"
    post "/approve/:id" => "listings#approve", :as => "listing_approve"
在my
routes.rb中

    link = view_context.link_to(link_name, revert_version_path(@version.next, :redo => !params[:redo]), :method => :post)
    redirect_to :back, :notice => "Undid #{@version.event}. #{link}"
    post "/approve/:id" => "listings#approve", :as => "listing_approve"
并查看我使用链接的位置:

    <%= link_to 'Approve Content', listing_approve_path(@listing), :method => :post %>

它可能是优先事项-使用routes.rb中的第一个匹配路由定义,因此如果您有资源路由或类似的路由,它可能会在该优先事项上匹配。

它可能是优先事项-使用routes.rb中的第一个匹配路由定义,所以,如果你有一个资源路线或类似的东西,它可能会首先与之匹配。

Hmmmm,在我看来它是正确的。这个测试听起来像是在生成一个GET而不是POST,所以要调用的链接可能有问题。你有:method=>:post在那里,所以应该没问题。似乎表明link_to将生成一些javascript以在单击时进行POST调用(并且禁用javascript的用户将获得正常的get链接,除非您使用:href=“#”)。因此,这可能是因为您的测试引擎没有运行javascript


您可以通过将其更改为提交隐藏表单的按钮来解决此问题,但这可能不是您想要的视觉表示形式。

Hmmmm,我觉得它很合适。这个测试听起来像是在生成一个GET而不是POST,所以要调用的链接可能有问题。你有:method=>:post在那里,所以应该没问题。似乎表明link_to将生成一些javascript以在单击时进行POST调用(并且禁用javascript的用户将获得正常的get链接,除非您使用:href=“#”)。因此,这可能是因为您的测试引擎没有运行javascript


您可以通过将其更改为提交隐藏表单的按钮来解决此问题,但这可能不是您想要的可视化表示。

我在rails应用程序中遇到了相同的问题,我用与您相同的方法解决了此问题,通过执行via::get on the match而不是via::post。我认为,出于某种原因,当您以/something/:id格式发送请求时,它将自动假定其为[GET]请求并搜索GET路由。这当然会在你的路线上造成问题,如果你把它作为:POST


如果有人对你为什么不能以“/something/:id”格式发送post请求有更好的解决方案或想法,请告诉我

我在我的rails应用程序中遇到了同样的问题,我用与您相同的方法解决了这个问题,即使用via::get on the match而不是via::post。我认为,出于某种原因,当您以/something/:id格式发送请求时,它将自动假定其为[GET]请求并搜索GET路由。这当然会在你的路线上造成问题,如果你把它作为:POST


如果有人对你为什么不能以“/something/:id”格式发送post请求有更好的解决方案或想法,请告诉我

你能发布你的routes.rb文件吗?我已经按照要求添加了routes文件作为编辑–还要注意,当设置为post时,我添加了
:via=>:post
,你需要rails.js才能让这些东西工作,它是否已加载到您的视图中?您可以发布routes.rb文件吗?我已根据要求添加了routes文件作为编辑–还请注意,当将其设置为post时,我添加了
:via=>:post
,您需要rails.js才能使这些内容正常工作,它是否已加载到您的视图中?我只是尝试将定义放在routes.rb文件的顶部,但它仍然无法解决此问题。感谢您的输入,我刚刚尝试将定义放在routes.rb文件的顶部,但仍然无法解决它。谢谢你的意见