2015-09-21 3 views
9

Sto utilizzando ideare 3.5.2, Ruby 2.2.2, Rails 4.2.3Perché ricevo NoMethodError per questa chiamata devise_group?

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

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

mia comprensione è che Devise dovrebbe caricarsi automaticamente these helpers e dovrei essere in grado di utilizzarli in ApplicationController senza fare nulla di speciale .

provo e faccio funzionare l'applicazione con 'rotaie' s ed ottengo questo errore:

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

Come posso risolvere questo problema?

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 

classe Manager:

class Manager < User 
end 

classe Employee:

class Employee < User 
end 
+0

Attualmente sto esaminando il motivo per cui i test superano, quale test devise_group nella devise gem. Chiaramente qualcosa sta includendo il file helpers.rb lì, ma non nella mia app, per qualche motivo. –

+0

Ho sollevato questo problema come problema con gli sviluppatori. Credo che sia un bug con idea, ma per favore non lasciare che questo ti impedisca di rispondere alla domanda/correggere il bug. problema: https://github.com/plataformatec/devise/issues/3757 –

+2

Hai ridefinito 'config.parent_controller' in Devise initializer? –

risposta

0

Se leggete attraverso questo Devise issue troverete persone con lo stesso problema. Alla fine, scoprirai che un possibile inizializzatore devise_permitted_parameters.rb impedisce il corretto caricamento di tutti gli helper di Devise. Rimuovendo questo inizializzatore e disinfettando i parametri all'interno del controller, è necessario risolvere il problema.

Nel frattempo, è possibile aggiungere include Devise::Controllers::Helpers::ClassMethods all'interno del proprio ApplicationController ma si dovrebbe evitare lo stile di codifica come questo in generale.