为什么url_for为未定义的路由返回/资产?

时间:2012-03-28 03:08:48

标签: ruby-on-rails ruby

我正在从rails 3.1.3升级到3.2.2,但由于某种原因,如果路由不存在,url_for总是返回/ assets。

例如:

url_for({}) #=> "/assets"
url_for({action: 'fake', controller: 'notreal'}) #=> /assets?action=fake&controller=notreal

但我希望它像往常一样抛出正常的ActionController :: RoutingError ......

2 个答案:

答案 0 :(得分:1)

如果通过指定controller-action构建路由,则Rails不会检查路由是否存在。自然它显示{}路由的/资产。

您最好在routes.rb中指定命名路由,然后将它们用于url_for。像:

url_for add_user_path

这可确保您成功(对于现有的命名路由)或获取错误。

HTH

答案 1 :(得分:0)

我认为您有资源预编译,并且由于资产文件夹中不存在图像,因此编译文件名为null,但路径指向assets文件夹的根目录。您是否也看到有关未在日志中找到预编译资产的错误?

在开发环境中尝试在没有资源预编译的情况下运行以通过此操作。我不会重新讨论有关资产预编译的详细信息 - 您可以查看http://guides.rubyonrails.org/asset_pipeline.html以获取有关资产管道的详细信息。如果您仅在生产环境中看到此问题,可能是因为主机平台正在为您预编译资产。

但是,如果您希望在生产中发生这种情况,您可能需要检查是否存在图像而不是禁用预编译。