如何确定rails.root以区分localhost和Web服务器?

时间:2016-02-22 15:51:06

标签: ruby-on-rails

我正在尝试设置在localhost上处于开发模式时以及应用程序在Web服务器上运行时正确的链接。我尝试使用以下内容并将其放在link_to

 $link = Rails.root.to_s + "/complaints/" + @complaint.id.to_s

我收到类似

的链接
C:/Users/cmendla/RubymineProjects/internal_complaints/complaints/22 

哪个不起作用。它应该是http://localhost:3000/complaints/22

我使用以下代码解决了这个问题:

 if request.port == '3000'    
       $link = "http://localhost:3000/complaints/" + @complaint.id.to_s    
     else
       $link = "http://web:" + request.port.to_s + "/complaints/" + @complaint.id.to_s    
     end

else语句使用网络服务器名称并插入rails app正在运行的端口号以及特定投诉的路径。虽然这有效,但我认为Rails.root可能会有一个更清晰的解决方案,可以正确显示链接,无论您是在localhost还是Web服务器上。

1 个答案:

答案 0 :(得分:1)

Rails.root给出了rails应用程序根目录的(文件系统)路径,而不是url。两者都是两回事。

此外,您不想对网址进行硬编码,因为很难适应应用程序中的更改。

生成网址的首选方法是:

  • 使用基于config/routes.rb文件中定义的路由自动/动态生成的命名url助手,并结合link_to方法(或)
  • 使用url_for辅助方法,这是link_to
  • 背后的工作马

通过以上任一方法,网址会自动调整以适应您的应用程序更改。请阅读Rails Routing from the Outside In了解详情。