尝试访问控制器上的非资源操作时,我得到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是否正在寻找与之关联的模型并且未能这样做?
答案 0 :(得分: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上的过滤器。
如果你看一下例子&gt;控制器位于declarative_authorization page on GitHub,它将提供必要的信息。 希望这可以帮助其他有此问题的人!