Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 呈现期间控制器插入的URL前缀_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 呈现期间控制器插入的URL前缀

Ruby on rails 呈现期间控制器插入的URL前缀,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我在链中有一些简单的控制器和视图,在链的末尾有静态html页面,因此: ControllerA->ControllerB->index.html 控制器A重定向到控制器B中的操作,然后该操作呈现html。 控制器C是第三个控制器,只能通过html中a href的链接访问 如果浏览器直接访问“myDomain.com/index.html”上的html页面,则会呈现基于引导的HTML5页面,其中的所有链接都能正常工作 但是,使用Rails链可以完美呈现html页面,但许多链接无法正常工作,因为GE

我在链中有一些简单的控制器和视图,在链的末尾有静态html页面,因此:

ControllerA->ControllerB->index.html

控制器A重定向到控制器B中的操作,然后该操作呈现html。 控制器C是第三个控制器,只能通过html中a href的链接访问

如果浏览器直接访问“myDomain.com/index.html”上的html页面,则会呈现基于引导的HTML5页面,其中的所有链接都能正常工作

但是,使用Rails链可以完美呈现html页面,但许多链接无法正常工作,因为GET中的URL以以下方式出错:

ActionController::RoutingError(没有与[GET]匹配的路由“/controllerB/home/ControllerC/desiredAction”)

因此,问题是html页面中的所有链接都在呈现html的控制器的最后激活的操作路径之前。当然,不存在这样的路线

我相信,从以前的实验来看,重定向而不是渲染也会出现同样的问题

从控制器呈现的静态html页面链接中形成URL的影响因素是什么

routes.rb确实尝试路由操作(可能我误解了文档):

以及静态页面中的触发html:

    <a href="controllerc/desiredAction" title="My title">

在静态html页面中,只需定义带有控制器、操作和id的链接,并将id的值设置为
nil

比如说

<%= link_to "Some Page", :controller => "your_destination_controller", :action => "your_action", :id => nil %>
“您的目的地控制器”,:action=>“您的操作”,:id=>nil%>

那么一切都会好起来的。如果仍然出现错误,请评论您的问题。

答案是html中的引用链接应该指定绝对路径而不是相对路径:

    # note: the path now begins with a '/', making it absolute
    <a href="/controllerc/desiredAction" title="My title">
#注意:路径现在以“/”开头,使其成为绝对路径
以前,在没有“/”前缀的情况下,路径被视为相对于正在执行渲染的当前控制器操作。使用“/”前缀,路径的第一个组件现在是所需的目标控制器


这适用于使用控制器呈现html或通过浏览器直接访问html页面。

当您使用rails控制器时,您需要在
routes.rb
文件中为该操作指定路径,即使您呈现的是静态页面。感谢您的编辑。您找到解决方案了吗这似乎是一个建议使用动态html(.erb)页面,而不是不了解控制器、操作和ID的静态html(.html)页面。无论是(.html)还是(.erb)该操作将评估嵌入的ruby并呈现模板。当从控制器B呈现页面时,这确实有效。对于大多数用户来说,这将是一个很好的解决方法,尽管它将Rails代码混合到一个纯html文件中。但是,当直接从浏览器访问建议的修复程序时,它会变成显示的文本,从而破坏页面。我们需要一个双向工作的解决方案,并且仍然希望理解(实际问题)为什么所有html URL都被呈现控制器的路径预先设置?
    # note: the path now begins with a '/', making it absolute
    <a href="/controllerc/desiredAction" title="My title">