0

Railsアプリでコントローラーアクションメソッドが無視されているように見える非常に奇妙なシナリオがあります。これは不可能だと思いますが、「木のための森」を見るのを手伝ってくれる人が必要です:) これが私が持っているものです. 最初のカスタム ルート:

 match 'topusers/:skill', :to => 'skills#topusers', :as => :top_users

次に、コントローラーで次のように減らしました。 class SkillsController < ApplicationController

class SkillsController < ApplicationController

        ....

    def top_users
        @skills = Skill.all
    end

        ....
end

私の見解は次のように縮小されました

<% @skills.each do |skill| %>
   <%= skill.name %>
<% end %>

これにより、@skills.each の行に「undefined method `each' for nil:NilClass」というエラーが表示されます。スキル テーブルにデータがあることはわかっており、Rails コンソールで確認できます。トラブルシューティングのために render :text => @skills.to_yaml を実行しましたが、無視されているように見えました。これは私を混乱させたので、top_users メソッドを完全に削除しましたが、top_users メソッドがないためにレールが私に叫ぶと思ったので、私を混乱させる同じエラーが発生しました。次に、Rails が別のコントローラーを見ている可能性があると考えたので、コントローラーの名前を SkillsController から SkillsXXXController に変更しました。今度はレールがコントローラーを見つけられなかったと怒鳴ったので、少なくとも正しいコントローラーを探していたことがわかりました。

では、なぜこの動作が見られるのか、何か考えはありますか? カスタムルートは正しいですか? 誰もこの種の行動を見たことがありますか?

前もって感謝します

クリス

4

1 に答える 1

1

マッチルートにアンダースコアがありませんか? 「スキル#トップユーザー」。top_users でコントローラー メソッドを定義したようです。

于 2012-04-19T21:52:50.883 に答える