2014-07-15 69 views
1

我在軌道中遇到了這個非常奇怪的問題。未知的動作軌道

我收到以下錯誤:

Unknown action The action 'blah_sdk' could not be found for AdminController

當按下網頁上的按鈕,這是發生。該按鈕的代碼是在這裏,位於BlahBase/index.html.erb

<div id="sdk_metrics"><%= button_to "Click me", {:action =>:view_sdk_data, :method => :get} %></div>

我有一個BlahBaseController不具有:view_sdk_data作用。該BlahBaseController頭看起來如下:

class Admin::BlahBaseController < AdminController

我有一個BlahSdkController是具有view_sdk_data動作像這樣的Admin::BlahBaseController一個子類:

class Admin::BlahSdkController < Admin::BlahBaseController 

    def view_sdk_data 
    #do something 
    end 
end 

但由於某些原因的軌道不停地嘗試看在AdminController,我不知道爲什麼。有任何想法嗎?

編輯: 另外這是我的路線文件看起來像

resources :blah_sdk do 
    collection do 
    get :view_sdk_data 
    end 
end 

回答

0

如果您BlahBase控制器使您擁有了{:action => :view_sdk_data}鏈接索引操作...然後url_for(產生你的網址,可見路由)將假定你仍然想要相同的控制器(即BlahBase而不是BlahSdk)。

如果你想另一個控制器,你必須告訴它例如使用:{:action => :view_sdk_data, :controller => :blah_sdk}

+0

是的,我不認爲這是問題,因爲即使當我去按鈕應該去的URL,我得到相同的消息,所以我不認爲這是按鈕的問題。 – user3746602

+0

當你在終端中運行'rake routes'時會發生什麼?你能編輯你的問題並添加相關路線嗎? –

0

路線

我立即建議是一個namespace,或範圍添加到您的路線:

#config/routes.rb 
namespace :admin do 
    resources :blah_sdk do 
     collection do 
      get :view_sdk_data 
     end 
    end 
end 

-

Path H elper

我的第二個建議是使用實際路徑助手,而不是僅僅參考action。這不僅可以讓您的代碼保持在DRYer以上,還可以確保您每次都發送正確的路徑/操作。

我會因此做這樣的事情:

<%= button_to "Test", admin_view_sdk_data_path %> 

作爲一項規則,它是總是更好地使用Rails中內建的幫手。這聽起來可能聽起來很蹩腳,但你可以依靠它們來提供正確的功能