0

NameError uninitialized constant WorkoutLog尝试访问控制器上的非资源操作时,我得到一个。

我的控制器如下所示:

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"}

我无法理解问题所在(尤其是在过去一晚试图弄清楚之后)。Rails 是否正在寻找与之关联的模型并且没有这样做?

4

1 回答 1

1

我弄清楚了这个问题。它与 declarative_authorization 有关。
由于我没有 100% 复制代码,因此我从上面粘贴的控制器代码中省略了以下内容:

filter_resource_access

declarative_authorization 将此用于资源丰富的路线 - 这不是我的情况。我已经切换到它filter_access_to :all并且它工作正常。workout_log.rb通过在模型中创建文件,我找到了问题的根源:

class WorkoutLog
end

然后,当我向 index 和 on_date 操作发出请求时,它给了我一个错误,即它无法在 WorkoutLog 上找到 ActiveModel 方法,这反过来又将我指向 WorkoutLogController 上的过滤器。

如果您在 GitHub 上的 declarative_authorization 页面查看示例 > 控制器,它将提供必要的信息。希望这可以帮助其他遇到此问题的人!

于 2012-02-13T04:03:25.227 回答