2012-03-28 3 views
6

Я модернизируюсь с рельсов 3.1.3 до 3.2.2, но по какой-то причине теперь url_for всегда возвращает/активы, если маршрут не существует.Почему url_for возвращает/активы для неопределенных маршрутов?

Например:

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

Но я хочу его бросить нормальную ActionController :: RoutingError, как это обычно бывает ...

+0

странный один. Проверьте все настройки env. Вы переопределили 'url_for'? Вы запустили «rake rails: update»? – Austin

+0

Вы решили это? У меня такая же проблема. Для простейшего сценария, т.е. Нет ресурса, только что создал DemoController и использовал redirect_to: action => 'show' из действия индекса. и он генерирует этот тип URL:/assets? action = show & controller = demo Я ожидаю, что это отобразит шаблон шоу. Вы узнали, что происходит? – jlstr

+0

@ user766388 все еще загадка:/ – bkempner

ответ

0

Я думаю, что у вас есть активы до компиляции, и так как изображения не существует в папке с ресурсами, имя файла компиляции равно null, но путь указывает на корень папки с ресурсами. Вы также видите ошибку в том, что не обнаруживаете предварительно скомпилированный актив в журналах?

Попробуйте запустить предварительную компиляцию активов в среде разработки, чтобы пройти мимо этого. Я не буду перерисовывать детали предварительной компиляции активов - вы можете проверить http://guides.rubyonrails.org/asset_pipeline.html для получения подробной информации о конвейере активов. Если вы видите эту проблему только в производственной среде, возможно, это связано с тем, что платформа хоста предварительно скомбинирует активы для вас.

Однако, если вы ожидаете, что это произойдет на производстве, вы можете проверить наличие изображения вместо отключения предварительной компиляции.

1

Rails не проверяет существование маршрута, если вы создаете маршрут, указав действие контроллера. И, естественно, он показывает/активы для {} маршрута.

Вам следует лучше указать именованные маршруты в routes.rb, а затем использовать их для url_for. Как:

url_for add_user_path

Это гарантирует, что вы либо успеха (для существующего имени маршрута) или получить сообщение об ошибке.

HTH

Смежные вопросы