2

在我的 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

有用。但是,有两个正斜杠看起来不是很好。我可以让它只出现一个正斜杠吗?

编辑:这些是我的一些文件:

配置/环境.rb

require File.expand_path('../application', __FILE__) 
Blog::Application.initialize!

配置/环境/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

配置/路由.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"}
4

7 回答 7

1

当我使用“匹配”时,这是我使用的语法:

match "/show_all" => "Posts#show_all"

但是我不确定那个正斜杠是否能解决你的问题。试试看?

干杯

于 2012-10-18T02:32:29.897 回答
1

您如何将应用程序设置为在 sub-uri 下提供服务?这是最有可能的问题。也许报告一下你是如何做到这一点的。大概您不是在 webrick 下运行它,而是在开发模式下的服务器上的乘客下运行?

RailsBaseURI 或 RAILS_RELATIVE_URL_ROOT 的值是多少,具体取决于您使用的内容,是否有斜杠?检查您的 apache/passenger 配置文件夹中任何位置的斜杠(虚拟主机中的文档根目录?)。还可以尝试输出 root_url 的值以查看它是什么。

作为一个简单的本地测试,创建一个新项目并使用类似这样的路由(注意范围):

博客::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 中获得“//”或其他内容?

于 2012-10-19T18:40:05.560 回答
1

这不是导轨问题。Rails 不知道自己的 url。它只知道资源的相对 url。这些亲属 url 被附加到域 url。它不会生成非法 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/

它看起来与您的问题非常相似。

于 2012-10-23T14:01:23.187 回答
0

你试过这个语法吗?

match '/show_all'=> "posts#show_all", :as => "show_all"

:as 选项为您提供正确的路径

<%= link_to 'Show all posts', show_all_path %>

或者,您的 default_url_options 可能会在 url 末尾附加额外的斜杠。检查您的操作 controller.default_url_options

于 2012-10-18T12:04:09.973 回答
0

我注意到您的 Rails 应用程序位于子目录中。我不确定它是否相关,但快速搜索生成了本指南,它可能会也可能不会解决您的问题。

于 2012-10-18T13:07:25.657 回答
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

您可以在此处查看更多示例

于 2012-10-19T08:40:03.933 回答
0

尝试使用空白应用程序重现此问题并将所有代码发布在 github 上,我认为错误可能是其他问题。

请告诉我们您的 rails 版本和 ruby​​ 版本。

于 2012-10-22T18:15:37.883 回答