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

bke*_*ner 6 ruby ruby-on-rails

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

例如:

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

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

Tab*_*rez 0

我认为您已经开启了资产预编译,并且由于资产文件夹中不存在图像,因此编译文件名称为空,但路径指向资产文件夹的根目录。您是否还看到有关在日志中找不到预编译资产的错误?

尝试在开发环境中运行没有资产预编译的情况来解决这个问题。我不会重复有关资产预编译的详细信息 - 您可以查看http://guides.rubyonrails.org/asset_pipeline.html以了解有关资产管道的详细信息。如果您仅在生产环境中看到此问题,可能是因为主机平台正在为您预编译资产。

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