ActiveAdmin и Devise - skip_confirmation! при создании действия

Я хочу позвонить user.skip_confirmation, пока его учетная запись создана администратором в панели администратора. Я хочу, чтобы пользователь подтвердил свою учетную запись на дальнейших этапах процесса регистрации, но не на create. Единственная идея, которую я имею, это переопределить create в контроллере:

controller do
  def create
    user = User.new
    user.skip_confirmation!
    user.confirmed_at = nil
    user.save!
  end
end

Проблема в том, что у меня разные attr_accessible для обычного пользователя и администратора, и это работает, потому что ActiveAdmin использует InheritedResources:

attr_accessible :name, :surname
attr_accessible :name, :surname, invitation_token, :as => :admin

После смены create не работает (раньше работало). Как я могу делать то, что хочу, и по-прежнему иметь возможность использовать эту функцию :as => :admin?


person ciembor    schedule 21.05.2013    source источник


Ответы (3)


Я смотрю на ответ, и никто не решает проблему под рукой. Я решаю это самым простым способом, как показано ниже.

before_create do |user|
 user.skip_confirmation!
end
person Cedric Loy    schedule 28.11.2015

controller do
  def create
    @user = User.new(params[:user].merge({:confirmed_at => nil}))
    @user.skip_confirmation!
    create! #or super
  end

  def role_given?
    true
  end

  def as_role
    # adapt this code if you need to
    { :as => current_user.role.to_sym } 
  end
end

что-то подобное может сработать

EDIT: если вы определите role_given? для возврата true и as_role, InheritResources будет использовать as_role для получения информации о роли

также

controller do
  with_role :admin
end

работает, но таким образом вы не можете изменить роль, данную пользователю.

person Orlando    schedule 21.05.2013
comment
Нет, в данном случае :as => :admin не работает. я получаю Can't mass-assign protected attributes - person ciembor; 21.05.2013
comment
Хм... это то, что я делал раньше, и это работает, если только я не переопределю create. - person ciembor; 21.05.2013

В вашем /app/models/user.rb

  before_create :skip_confirmation

  def skip_confirmation
    self.skip_confirmation! if Rails.env.development?
  end
person Community    schedule 26.08.2014