0

當試圖訪問控制器上的非資源性操作時,我得到一個NameError uninitialized constant WorkoutLogRails 3 NameError(未初始化的常量<controllerName>)

我的控制器看起來如下:

class WorkoutLogController < ApplicationController 
    def index 
    # random code 
    end 

    def on_date 
    # random code 
    end 
end 

我的路線文件:

match "workout_log/:date", :controller => "workout_log", :action => "on_date", :as => "log_on_date" 
match "workout_log", :controller => 'workout_log', :action => 'index' 

然後,我有我的link_to這樣:

<%= link_to "View Log", log_on_date_path(:date => Date.today.strftime('%d-%B-%Y')), :remote => true, "data-type" => "html" %> 

的WorkoutLogController沒有模型在它後面 - 它只是一個控制器。然而,因爲它引發以下錯誤,我不能執行對on_date的請求:

NameError (uninitialized constant WorkoutLog): 

當我運行rake routes它似乎是罰款,因爲它會生成以下:

log_on_date  /workout_log/:date(.:format)     {:controller=>"workout_log", :action=>"on_date"} 
workout_log  /workout_log(.:format)      {:controller=>"workout_log", :action=>"index"} 

我可以我不知道問題出在哪裏(特別是在過去的一個晚上試圖弄清楚之後)。鋼軌是否在尋找與之相關聯的模型,並且未能這樣做?

+0

我已經完全複製了您的代碼,因爲它顯示在這裏,它適用於我。想知道在路線上是否有額外的東西可能?另外,你的控制器應該命名爲workout_log_controller.rb,否則你會得到一個路由錯誤。不是你正在尋找的答案,但我希望它有幫助。祝你好運。 – miked 2012-02-13 02:23:05

+0

文件名是workout_log_controller.rb(如您所述)。這就是讓我對這個問題感到厭煩的 - 所有的說法,它應該工作,哈哈。我會進一步檢查路線以及它們的順序或優先順序。謝謝您的幫助! – MunkiPhD 2012-02-13 03:32:18

回答

1

我想出了這個問題。它必須與declarative_authorization。
因爲我沒有複製的代碼100%,我離開了從我的控制器代碼粘貼以上的下列內容:

filter_resource_access 

declarative_authorization使用此爲足智多謀的路線 - 這是不是我的情況。我已經把它切換到filter_access_to :all,它工作正常。我在我的模型創建文件workout_log.rb抓住了問題的根源:

class WorkoutLog 
end 

然後,當我發出來的指數和on_date行動的請求,它給我的錯誤,它無法在找到加載ActiveModel方法WorkoutLog,它反過來指向WorkoutLogController上的過濾器。

如果您在示例>控制器declarative_authorization page on GitHub下查看,它將提供必要的信息。 希望這可以幫助任何有此問題的人!

+0

很高興你知道了。我肯定還有其他人在那裏工作,並對它的可能性感到好奇。感謝您在這裏更新您的答案。 – miked 2012-02-13 17:20:08

相關問題