在我的Rails项目中,在我的index
视图中,我有一个链接
<%= link_to 'Show all posts', show_all_path %>
在routes.rb
中,我有一条路线:
match "show_all" => "Posts#show_all"
当我点击该链接时,它会从
开始http://<domain name>/my_rails_project
到
http://<domain name>/my_rails_project//show_all
有效。但是,有两个正斜杠看起来不太好。我可以这样做,只出现一个正斜杠吗?
编辑:这些是我的一些文件:
到config / environment.rb
require File.expand_path('../application', __FILE__)
Blog::Application.initialize!
config / environments / development.rb
Blog::Application.configure do
config.cache_classes = false
config.whiny_nils = true
config.consider_all_requests_local = true
config.action_view.debug_rjs = true
config.action_controller.perform_caching = false
config.action_mailer.raise_delivery_errors = false
config.active_support.deprecation = :log
config.action_dispatch.best_standards_support = :builtin
config.action_controller.asset_host = "//pauls.scripts.asu.edu/blog/public"
end
config / routes.rb:
Blog::Application.routes.draw
do resources :posts match "show_all" => "Posts#show_all"
end
rake routes
show_all /show_all(.:format) {:action=>"show_all", :controller=>"Posts"}
答案 0 :(得分:1)
当我使用“匹配”时,这是我使用的语法:
match "/show_all" => "Posts#show_all"
但是我不确定这个正斜杠是否会解决你的问题。试一试?
干杯
答案 1 :(得分:1)
如何将应用设置为在子uri下提供?这是最可能的问题。或许可以报告你是如何做到的。据推测,你不是在webrick下运行它,而是在dev模式的服务器上乘客?
RailsBaseURI或RAILS_RELATIVE_URL_ROOT的值是多少,具体取决于您使用的是什么,它是否有尾部斜杠?检查你的apache / passenger配置文件夹上的任何位置是否有尾随斜杠(虚拟主机中的文档根目录?)。尝试输出root_url的值以查看它是什么。
作为一个简单的本地测试,创建一个新项目并使用类似这样的路由(注意范围):
Blog :: Application.routes.draw做
scope 'my_rails_project' do
match '/test', :to => 'welcome#test'
end
端
然后在新的帖子控制器中进行测试操作:
def test
render :text => "ROOT-#{root_url}"
end
通过使用更简单的路线,并指导您重做设置,可能会对出现问题的方法有所了解。
然后在您的实际项目中,您可以尝试两件事,更改用于设置子uri的ENV变量,验证虚拟主机设置,以及围绕所有路径设置范围:
scope 'my_rails_project' do
match '/show_all'=> "posts#show_all", :as => "show_all"
end
我还会尝试检查show_all_path的输出,看看你在链接中实际得到了什么,例如你在href中得到'//',还是其他什么?
答案 2 :(得分:1)
这不是铁轨问题。 Rails不知道他自己的网址。它只知道资源的相对URL。这些亲戚网址被添加到域网址中。它不会生成非法的URL,因此不会产生错误。
所以它看起来像一个虚假的主机问题。但我无法告诉你究竟是什么问题。在某些时候,您的域名网址是www.your_domain / rails_projects /.
您可以更改虚拟主机以获取www.your_domain。
更新:
这是一个例子:
<VirtualHost 172.20.30.40>
DocumentRoot /www/subdomain/sub2
ServerName www.sub2.domain.tld
ServerPath /sub2/
</VirtualHost>
将回复:
http://www.sub2.domain.tld/sub2/
它看起来非常类似于你的问题。
答案 3 :(得分:0)
你尝试过这种语法吗?
match '/show_all'=> "posts#show_all", :as => "show_all"
:as option为您提供正确的路径
<%= link_to 'Show all posts', show_all_path %>
或许你的default_url_options会在网址的末尾添加额外的斜杠。 检查您的操作controller.default_url_options
答案 4 :(得分:0)
我注意到您的Rails应用程序位于子目录中。我不确定它是否相关,但快速搜索产生this guide可能会或可能不会解决您的问题。
答案 5 :(得分:0)
如果您想要一个像http://<domain name>/my_rails_project/show_all
这样的网址,请将其添加到您的routes.rb
resources :posts
match "show_all", :to => "posts#show_all"
如果您更喜欢http://<domain name>/my_rails_project/posts/show_all
这样的网址,请添加以下内容:
resources :posts do
collection do
get "show_all"
end
end
您可以看到更多示例here
答案 6 :(得分:0)
尝试用空白的应用程序重现这个并在github上发布所有代码,我认为错误可能是其他的。
请告诉我们你的rails版本和ruby版本。