2014-11-25 2 views
-1

Я только что сгенерировал контроллер, и когда я пытаюсь получить доступ к любым маршрутам с ним, рельсы просто дают мне UrlGenerationError.rails 4 маршрута ошибка с новым контроллером

# Error message 
ActionController::UrlGenerationError in NaturalProductsController#organic 
No route matches {:action=>"home", :controller=>"natural_products", :locale=>:en} 

Проблема, кажется, что она использует {:action=>"home", когда мой контроллер даже не имеет «домашний» ничего. Но я не могу для жизни понять, почему, поскольку я использую link_to t("organic.link"), organic_path, и даже вручную набирать localhost:3000/en/organic получает ту же ошибку.

конфигурации/routes.rb

Rails.application.routes.draw do 

    scope "(:locale)", locale: /en|pt|nb/ do 
    root    'company_name#home' 
    get 'about' => 'company_name#about' 
    get 'contact' => 'company_name#contact' 
    get 'products' => 'company_name#products' 
    get 'organic'  => 'natural_products#organic' 
    end 

http://localhost:3000/rails/info/routes:

root_path  GET /(:locale)(.:format)   company_name#home {:locale=>/en|pt|nb/} 
about_path  GET (/:locale)/about(.:format) company_name#about {:locale=>/en|pt|nb/} 
contact_path GET (/:locale)/contact(.:format) company_name#contact {:locale=>/en|pt|nb/} 
products_path GET (/:locale)/products(.:format) company_name#products {:locale=>/en|pt|nb/} 
organic_path  GET (/:locale)/organic(.:format)  natural_products#organic {:locale=>/en|pt|nb/} 

Я использую рельсы 4.2.0beta4 с Kubuntu 14.04.

Редактировать: Полная трассировка стека, как и требовалось. Единственными частями, которые есть в моем приложении, являются представления заголовков и приложений. Я тщательно их рассмотрю, но они уже отлично работают с существующим контроллером.

Редактировать 2: Я нашел проблему, ответил на нее. Кроме того, не требуется полная трассировка стека.

app/views/layouts/_bootstrap_header.html.haml:15:in `_app_views_layouts__bootstrap_header_html_haml__3398608881953314325_70155715867000' 
app/views/layouts/application.html.haml:18:in `_app_views_layouts_application_html_haml__2085176017777231976_43442360' 
+1

Является ли ваш контроллер фактически названным foo_bar? И ваше действие на самом деле называется baz? Если нет, введите настоящие имена - это облегчит людям понимание и обнаружение ошибок. –

+0

@ joshua.paling Я пытался быть [минимальным, полным и проверяемым] (http://stackoverflow.com/help/mcve), а также не помещать имена с еще не запущенного сайта для индексирования google , Теперь я изменил имена, чтобы быть более описательными, и создал новый контроллер с фактическим названием «natural_products» с действием «органический», чтобы проверить, что моя проблема не была разовой. – madstap

+1

Можете ли вы показать больше об ошибке и трассировке стека? Какая строка является ошибкой? Это в представлении или в действии контроллера? – sealocal

ответ

1

Я не уверен, если это будет все исправить, но link_to занимает якорный текст в качестве первых паров.

Так, а не link_to organic_path, оно должно быть link_to 'click here', organic_path или аналогичным.

+0

woops, я сделал опечатку во всем замешательстве. Я исправил его сейчас, и он все равно дает мне сообщение об ошибке. Даже просто ввод текста в url 'localhost: 3000/en/organic' дает ошибку.Я попытался удалить контроллер, создать новый с разными именами и получить доступ к нему непосредственно с маршрута, который он автоматически делает, ничего не меняя, как 'localhost: 3000/natural_products/organic' с' get 'natural_products/organic'' наверху of routes.rb, и это дает мне ту же ошибку. – madstap

0

У меня был файл заголовка с этими ссылками, и они отлично работали, когда у меня был только один контроллер.

%li{class: ("active" if current_page?(action: "home"))} 
    =link_to t("home.link"),  root_path 

%li{class: ("active" if current_page?(action: "products"))} 
    =link_to t("products.link"), products_path 

... и т.д.

Теперь, когда я добавил второй контроллер и попытался получить к нему доступ, он побежал `current_page (действие: "домашний")? С новым контроллером ...

исправление было указать контроллер, например:

%li{class: ("active" if current_page?(action: "home", controller: "company_name"))} 
    =link_to t("home.link"),  root_path 

Я извиняюсь, если я впустую anybodys время, я должен был последовать трассировки стека лучше начать с ... +1 к sealocal кто заставил меня увидеть ошибку или.

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