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 ページの Examples > Controller の下を見ると、必要な情報が提供されます。これが、この問題を抱えている他の人に役立つことを願っています!

于 2012-02-13T04:03:25.227 に答える