2014-11-25 81 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誰讓我看到了錯誤要麼。