我刚刚生成了一个控制器,当我尝试使用它访问任何路由时,rails只给我一个UrlGenerationError。
# 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/}
我正在使用rails 4.2.0beta4和kubuntu 14.04。
编辑:完整堆栈跟踪,根据要求。我的应用程序中唯一的部分是标题和应用程序视图。我会仔细检查它们,但它们已经可以与现有的控制器一起使用。
Edit2:我发现了问题,用它来回答。此外,不需要完整的堆栈跟踪。
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'
答案 0 :(得分:1)
我不确定这是否会解决所有问题,但link_to
会将锚文本作为第一个参数。
而不是link_to organic_path
,它应该是link_to 'click here', organic_path
或类似的。
答案 1 :(得分: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?(action:" home")...
修复是指定一个控制器,如下所示:
%li{class: ("active" if current_page?(action: "home", controller: "company_name"))}
=link_to t("home.link"), root_path
对不起,如果我浪费了任何时间,我应该更好地跟踪堆栈跟踪开始... +1给那个让我看到错误的海洋公司。