2013-12-11 5 views
1

Пожалуйста, дайте мне знать, если я собираюсь сделать это неправильно. Я пытаюсь добавить пару настраиваемых атрибутов в User в метод create, а также вызвать метод Analytics, если пользователь сохранен.Overwriting 'Devise :: RegistrationsController' с пользовательским созданием дает NoMethodError

Я определил новый контроллер:

class RegistrationsController < Devise::RegistrationsController 


    def create 
    build_resource(sign_up_params) 

    resource.public_id = Utilities::generate_code 
    resource.referral_code = Utilities::generate_code 
    if resource.save 

     Analytics.identify(
      user_id: resource.id.to_s, 
      traits: { email: resource.email }) 

     yield resource if block_given? 
     if resource.active_for_authentication? 
     set_flash_message :notice, :signed_up if is_flashing_format? 
     sign_up(resource_name, resource) 
     respond_with resource, :location => after_sign_up_path_for(resource) 
     else 
     set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if  is_flashing_format? 
     expire_data_after_sign_in! 
     respond_with resource, :location => after_inactive_sign_up_path_for(resource) 
     end 
    else 
     clean_up_passwords resource 
     respond_with resource 
    end 
    end 
end 

Единственное отличие в этом создании метода является то, что я добавляю referral_code и public_id до того, как сохранить и работает Analytics после.

 Analytics.identify(
     user_id: resource.id.to_s, 
     traits: { email: resource.email }) 

Когда я создаю пользователя я получаю

undefined method `is_flashing_format?' for #<RegistrationsController:0x007fdba130d9a8> 

Я не понимаю, почему этот метод не наследуется. Это даже правильный способ изменения дизайна или добавления атрибутов/добавления аналитики?

+0

Довольно уверен, что сначала ваш класс должен выглядеть как Modelname :: RegistrationsController

+0

Хмм, попадание в фактический контроллер и метод контроллера работает нормально. – Ashbury

+0

Следуя wiki в github, я подозреваю, что вы правы, поэтому я изменил его. Тем не менее, все еще получают неопределенную ошибку метода. – Ashbury

ответ

3

Я понял, я использую Devise версии 3.1.1 (заблокирован для зависимостей), он выглядит как is_flashing_format? был добавлен в прошлом месяце в 3.2.0.

Я изменил метод в своем контроллере на is_navigational_format? и все хорошо!

Смежные вопросы