2015-09-21 4 views
9

、ルビー2.2.2は、4.2.3このdevise_group呼び出しでNoMethodErrorが発生するのはなぜですか?私は3.5.2を考案使ってい

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    protect_from_forgery with: :exception 

    devise_group :user, contains: [:manager, :employee] 
end 

私の理解では、工夫が自動的these helpersをロードしなければならないと私は特別な何もしないでApplicationControllerにでそれらを使用することができるはずということですレール。

私がしようとすると「レールS」でアプリを実行し、私はこのエラーを取得する:

multi-user-role-devise/app/controllers/application_controller.rb:6:in <class:ApplicationController>': undefined method devise_group' for ApplicationController:Class (NoMethodError) from /home/me/ror-code/multi-user-role-devise/app/controllers/application_controller.rb:1:in `' ....etc

が、私はこれをどのように修正することができますか?

Gemfile:

source 'https://rubygems.org' 
ruby '2.2.2' 
gem 'rails', '4.2.3' 
gem 'sqlite3' 
gem 'sass-rails', '~> 5.0' 
gem 'uglifier', '>= 1.3.0' 
gem 'coffee-rails', '~> 4.1.0' 
gem 'jquery-rails' 
gem 'turbolinks' 
gem 'jbuilder', '~> 2.0' 
gem 'foundation-rails' 
gem 'simple_form' 
gem 'devise' 
group :development do 
    gem 'better_errors' 
    gem 'quiet_assets' 
    gem 'rails_layout' 
    gem 'spring-commands-rspec' 
end 
group :development, :test do 
    gem 'factory_girl_rails' 
    gem 'faker' 
    gem 'rspec-rails' 
    gem 'byebug' 
    gem 'web-console', '~> 2.0' 
    gem 'spring' 
end 
group :test do 
    gem 'capybara' 
    gem 'database_cleaner' 
    gem 'launchy' 
    gem 'selenium-webdriver' 
end 

マネージャークラス:

class Manager < User 
end 

Employeeクラス:

class Employee < User 
end 
+0

私は現在、テストが合格しなかった理由、devise_groupがdevise gemでテストされているかどうかを調べています。明らかに何かがhelpers.rbファイルをそこに含んでいますが、何らかの理由で私のアプリではありません。 –

+0

私はこれを開発者の問題として提起しました。私はそれが奇妙なものだと信じていますが、あなたが質問に答えようとするのを止めさせないでください/バグを修正してください。 https://github.com/plataformatec/devise/issues/3757 –

+2

Devise Initializerで 'config.parent_controller'を再定義しましたか? –

答えて

0

あなたはこのDevise issueを読んでいる場合は、同じ問題を持つ人を見つけるでしょう。最後に、devise_permitted_parameters.rbイニシャライザがすべてのDeviseヘルパの正しい読み込みを妨げていることがわかります。このイニシャライザを削除し、コントローラ内のパラメータを消毒することで問題を解決する必要があります。

一方、ApplicationControllerにはinclude Devise::Controllers::Helpers::ClassMethodsを追加できますが、このような一般的なスタイルはコーディングしないでください。

関連する問題