2015-09-21 20 views
9

Używam opracować 3.5.2 Ruby 2.2.2, szyny 4.2.3Dlaczego otrzymuję NoMethodError dla tego wywołania 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 

Rozumiem, że Devise powinien załadować these helpers automatycznie i powinna być w stanie z nich korzystać w ApplicationController nie robiąc nic szczególnego .

próbuję i uruchom aplikację z 'szyny s' i dostaję ten błąd:

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

Jak mogę rozwiązać ten problem?

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 

klasa Manager:

class Manager < User 
end 

class Pracownik:

class Employee < User 
end 
+0

Obecnie przyglądam się, dlaczego testy mijają, które testują devise_group w gemie. Najwyraźniej coś zawiera plik helpers.rb, ale nie w mojej aplikacji, z jakiegoś powodu. –

+0

Podniosłem to jako problem z programistami. Uważam, że jest to błąd w opracowaniu, ale nie pozwól, aby to powstrzymało Cię przed odpowiedzią na pytanie/naprawieniem błędu. issue: https://github.com/plataformatec/devise/issues/3757 –

+2

Czy ponownie zdefiniowałeś 'config.parent_controller' w inicjatorze Devise? –

Odpowiedz

0

Jeśli czytasz przez ten Devise issue znajdziesz ludzi z tym samym problemem. Na końcu dowiesz się, że możliwy inicjator devise_permitted_parameters.rb uniemożliwia prawidłowe ładowanie wszystkich pomocników Devise. Usunięcie inicjalizatora i odkażenie parametrów w kontrolerze powinno rozwiązać problem.

W międzyczasie można dodać include Devise::Controllers::Helpers::ClassMethods w swoim ApplicationController, ale należy unikać takiego stylu kodowania w ogóle.

Powiązane problemy