2014-11-25 80 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获得相同的错误。

的config/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/} 

我使用与Kubuntu的14.04轨4.2.0beta4。

编辑:完整的堆栈跟踪,根据要求。我的应用程序中唯一的部分是标题和应用程序视图。我会非常仔细地检查他们,但他们已经在现有的控制器上正常工作。

编辑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?你的行为实际上命名为巴兹?如果没有,请输入真实姓名 - 这会让人们更容易理解和发现错误。 – 2014-11-25 02:57:33

+0

@ joshua.paling我试图成为[最小化,完整和可验证的](http://stackoverflow.com/help/mcve),并且还没有将尚未启动的网站的任何名称通过google进行索引。我现在更改了名称,以便更具描述性,并用实际名称“natural_products”生成一个新控制器,并使用“有机”操作来验证我的问题不是一次性事件。 – madstap 2014-11-25 03:49:54

+1

你能展示更多关于错误和堆栈跟踪吗?哪条线是错误投掷?它是在一个视图还是一个控制器操作? – sealocal 2014-11-25 06:30:59

回答

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',顶部有''natural_products/organic'' routes.rb,它给了我同样的错误。 – madstap 2014-11-25 04:23:35

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 

对不起,如果我浪费任何人的时候,我应该遵循的堆栈跟踪更好的开始... +1到sealocal谁让我看到了错误要么。