我正在尝试设置在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服务器上。
答案 0 :(得分:1)
Rails.root
给出了rails应用程序根目录的(文件系统)路径,而不是url。两者都是两回事。
此外,您不想对网址进行硬编码,因为很难适应应用程序中的更改。
生成网址的首选方法是:
config/routes.rb
文件中定义的路由自动/动态生成的命名url助手,并结合link_to
方法(或)url_for
辅助方法,这是link_to
通过以上任一方法,网址会自动调整以适应您的应用程序更改。请阅读Rails Routing from the Outside In了解详情。