Rails 3 NameError (неинициализированная константа <controllerName>) - PullRequest
0 голосов
/ 13 февраля 2012

Я получаю 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 "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"}

Я не могу понять, в чем проблема (особенно после того, как провел прошлую ночь, пытаясь разобраться).Рельсы ищут модель для связи с ней и не могут это сделать?

1 Ответ

1 голос
/ 13 февраля 2012

Я разобрался в проблеме. Это было связано с декларативным_авторизацией.
Поскольку я не скопировал код на 100%, я пропустил следующее из кода моего контроллера, вставленного выше:

filter_resource_access

Declarative_authorization использует это для ресурсоемких маршрутов - что не было в моем случае. С тех пор я переключил его на filter_access_to :all, и он отлично работает. Я дошел до корня проблемы, создав файл workout_log.rb в моих моделях:

class WorkoutLog
end

Затем, когда я отправил запрос на действия index и on_date, он выдал ошибку, что не смог найти методы ActiveModel в WorkoutLog, что, в свою очередь, указало мне на фильтры в WorkoutLogController.

Если вы загляните под Примеры> Контроллер на странице Declarative_authorization на GitHub , она предоставит необходимую информацию. Надеюсь, это поможет любому, у кого есть эта проблема!

...