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_accessibles за стандартен потребител и администратор и работи, защото 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

нещо такова може да свърши работа

РЕДАКТИРАНЕ: ако дефинирате 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