我正在从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 ......
答案 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以获取有关资产管道的详细信息。如果您仅在生产环境中看到此问题,可能是因为主机平台正在为您预编译资产。
但是,如果您希望在生产中发生这种情况,您可能需要检查是否存在图像而不是禁用预编译。