21

devise をセットアップしていて、devise ヘルパーを使用できるようにする必要があります。before_filter :authenticate_user!アプリケーションコントローラーに追加 すると、次のエラーが発生しますundefined method 'authenticate_user!' for #<HomeController:*>

ホームコントローラーには直接存在しませんが、アプリケーションコントローラーから継承されますskip_before_filter :authenticate_user!。自宅(または任意のコントローラー)で使用してページにアクセスしようとすると、次のエラーが発生します。

undefined method `user_signed_in?' for #<#<Class *>

それを呼び出すlayouts/application.html.erbファイルの行で壊れます。どのヘルパーでも同じことが起こります。それらがまったくロードされていないように見えますが、レールコンソールをロードし$LOAD_PATH.dupて出力を入力すると、含まれている

 "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/lib", "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/app/controllers", "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/app/helpers", "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/app/mailers" 

したがって、実際にはレールによってロードする必要があるようです。

これは私のアプリケーションコントローラーです

class ApplicationController < ActionController::Base

helper :all # すべてのヘルパーを常に含めます
protect_from_forgery
include ActionView::Helpers::NumberHelper
before_filter :authenticate_user!

終わり

デバイスをインストールした後、サーバーを再起動し、問題を解決するためにさまざまな試みを何度も試みました。さらにファイルや情報が必要な場合は、お知らせください。事前にどうもありがとうございました。

編集: 私の user.rb ファイルは、実際にデバイスをインストールしたことを示すように要求されました

class User < ActiveRecord::Base

  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :encryptable, :encryptor => :restful_authentication_sha1  

  # Setup accessible (or protected) attributes for your model  
  attr_accessible :email, :password, :password_confirmation, :remember_me  

end

編集:エラーメッセージ全体

HomeController#index の NoMethodError

未定義のメソッド `authenticate_user!' for #< HomeController:0x000000040c45a0 > '

ここに完全なトレースがあります

activesupport (3.2.13) lib/active_support/callbacks.rb:418:in ` run _2094683035699451847__process_action_ 2229546931289158113 _callbacks'

activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'

activesupport (3.2.13) lib/active_support/callbacks.rb:385:in >`_run_process_action_callbacks'

activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'

actionpack (3.2.13) lib/abstract_controller/callbacks.rb:17:in `process_action'

actionpack (3.2.13) lib/action_controller/metal/rescue.rb:29:in `process_action'

actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'

activesupport (3.2.13) lib/active_support/notifications.rb:123:in `ブロックインインストゥルメント'

activesupport (3.2.13) lib/active_support/notifications/instrumenter.rb:20:in `instrument'

activesupport (3.2.13) lib/active_support/notifications.rb:123:in `instrument'

actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:29:in `process_action'

actionpack (3.2.13) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'

actionpack (3.2.13) lib/abstract_controller/base.rb:121:in `プロセス'

actionpack (3.2.13) lib/abstract_controller/rendering.rb:45:in `プロセス'

actionpack (3.2.13) lib/action_controller/metal.rb:203:in `ディスパッチ'

actionpack (3.2.13) lib/action_controller/metal/rack_delegation.rb:14:in `ディスパッチ'

actionpack (3.2.13) lib/action_controller/metal.rb:246:in `ブロックインアクション'

actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:73:in `call'

actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'

actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:36:in `call'

ジャーニー (1.0.4) lib/journey/router.rb:68:in `block in call'

ジャーニー (1.0.4) lib/journey/router.rb:56:in `each'

ジャーニー (1.0.4) lib/journey/router.rb:56:in `call'

actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:612:in `call'

warden (1.2.1) lib/warden/manager.rb:35:in `block in call'

warden (1.2.1) lib/warden/manager.rb:34:in `catch'

warden (1.2.1) lib/warden/manager.rb:34:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'

ラック (1.4.5) lib/rack/etag.rb:23:in `call'

ラック (1.4.5) lib/rack/conditionalget.rb:25:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/head.rb:14:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb:21:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb:242:in `call'

ラック (1.4.5) lib/rack/session/abstract/id.rb:210:in `context'

ラック (1.4.5) lib/rack/session/abstract/id.rb:205:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/cookies.rb:341:in `call'

activerecord (3.2.13) lib/active_record/query_cache.rb:64:in `call'

activerecord (3.2.13) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'

activesupport (3.2.13) lib/active_support/callbacks.rb:405:in ` run _177144612565476380_ call _4534346825225857812__callbacks'

activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'

activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'

activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'

actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:27:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/reloader.rb:65:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'

railties (3.2.13) lib/rails/rack/logger.rb:32:in `call_app'

railties (3.2.13) lib/rails/rack/logger.rb:16:in `block in call'

activesupport (3.2.13) lib/active_support/tagged_logging.rb:22:in `タグ付き'

railties (3.2.13) lib/rails/rack/logger.rb:16:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb:22:in `call'

ラック (1.4.5) lib/rack/methodoverride.rb:21:in `call'

ラック (1.4.5) lib/rack/runtime.rb:17:in `call'

activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb:72:in `call'

ラック (1.4.5) lib/rack/lock.rb:15:in `call'

actionpack (3.2.13) lib/action_dispatch/middleware/static.rb:63:in `call'

railties (3.2.13) lib/rails/engine.rb:479:in `call'

railties (3.2.13) lib/rails/application.rb:223:in `call'

railties (3.2.13) lib/rails/railtie/configurable.rb:30:in `method_missing'

パッセンジャー (4.0.2) lib/phusion_passenger/rack/thread_handler_extension.rb:77:in `process_request'

パッセンジャー (4.0.2) lib/phusion_passenger/request_handler/thread_handler.rb:135:in `accept_and_process_next_request'

パッセンジャー (4.0.2) lib/phusion_passenger/request_handler/thread_handler.rb:106: in `main_loop'

パッセンジャー (4.0.2) lib/phusion_passenger/request_handler.rb:449:in `ブロック (4 レベル) in start_threads'

パッセンジャー (4.0.2) lib/phusion_passenger/utils/robust_interruption.rb:108:in `disable_interruptions'

パッセンジャー (4.0.2) lib/phusion_passenger/request_handler.rb:444:in `ブロック (3 レベル) in start_threads'

編集: これは、コンソールで Devise.helpers を実行したときのテキストです。

$レールコンソール

開発環境のロード (Rails 3.2.13)

1.9.3-p429 :001 > Devise.helpers

=> #< Set: {Devise::Controllers::Helpers} >

編集: これは私のルート rb ファイルです。:Application.routes.draw do

devise_for :users  

resource :sessions, :only => [:new, :create, :destroy]

devise_scope :user do
    match 'signup' => 'users#new', :as => :signup
    match 'register' => 'users#create', :as => :register
    match '/login' => 'sessions#new', :as => :login 
     match 'logout' => 'sessions#destroy', :as => :logout
end
match '/activate/:activation_code' => 'users#activate', :as => :activate, :activation_code => nil

match '/users/:id', :to => 'users#show', :as => :user

resources :users do

member do
     put :suspend
     put :unsuspend
     delete :purge
end

end

resource :sessions

   other resources

match '' => 'home#index', :as => :home
match ':controller(/:action(/:id))'
root to: 'home#index'
end 
4

6 に答える 6

2

うまくいかないことがたくさんあります。順番にチェックするいくつかのこと:

  • 呼び出すbefore_filter :authenticate_user!ことができないということは、デバイスが正しくセットアップされていないことを示しています。
  • devise_for :usersroutes.rbを追加します (これは user sです。これは正しいことです)。次に、テスト用にスコープ指定されたルールを単純化します。
  • before_filter :authenticate_user!コントローラーでヘルパーを取得するか、ヘルパーを手動で含める作業が必要です
  • ベース コントローラーが ActionController から継承されていない場合は、ヘルパー メソッドを手動で追加する必要があります。これをベース コントローラーに配置します。helper_method "current_user", "user_signed_in?", "user_session"
  • 確認すべき 1 つのこと:self.controller.current_userあなたの erb で動作しますか? これは、helper_methods が含まれていないことを示しています。
于 2015-04-27T19:38:20.100 に答える
2

この行をコントローラーに追加して、私のためにトリックを行いました:

include Devise::Controllers::Helpers
于 2016-01-13T07:00:59.597 に答える