[英]Rails 3 NameError (uninitialized constant <controllerName>)
尝试访问控制器上的非资源操作时,我得到了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是否正在寻找与之关联的模型而没有这样做?
我发现了问题。 它与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页上的 Examples> Controller下的内容,它将提供必要的信息。 希望这对其他遇到此问题的人有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.