设置多个设计注册控制器?

时间:2015-01-05 21:19:19

标签: ruby-on-rails ruby ruby-on-rails-3 devise

我有一个设计用户模型和设计管理模型,每个都有嵌套属性,因此我需要覆盖每个单独的模型来修改强参数,以便我的嵌套属性将通过。

我该怎么做呢?我已经覆盖了其中一个注册控制器并且它完美地工作了,但是,如果我复制它并将控制器名称设置为AdminregistrationsController < Devise::RegistrationsController(因为我当然不能有两个叫RegistrationsController那么它没有用。

任何建议都会很棒。

2 个答案:

答案 0 :(得分:1)

如果您有,请说用户和管理员模型,您可以执行以下操作:

控制器/用户/ registration_controllers.rb

class Users::RegistrationsController < Devise::RegistrationsController
  before_filter :configure_permitted_parameters

  def new
      build_resource({})
      #self.resource.regions.build
      #respond_with self.resource
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username << :gender << :email << :password_confirmation << :password << :roles_mask << :phone << :first_name << :last_name << :googleplus
  end 

end

控制器/管理员/ registration_controllers.rb

class Admins::RegistrationsController < Devise::RegistrationsController
  before_filter :configure_permitted_parameters

  def new
      build_resource({})
      #self.resource.regions.build
      #respond_with self.resource
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username << :email << :password_confirmation << :password << :roles_mask << :phone << :first_name
  end 

end

显然你需要更改参数列表,上面只是随机的例子。希望这会有所帮助。

答案 1 :(得分:0)

考虑@GeorgKefferböck的回答并改进设计4 我会将 configured_permitted_pa​​rameters 方法放在应用程序控制器中,因为多个设备控制器肯定需要这些参数

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  def configure_permitted_parameters
    if current_user
      update_attrs = [:password, :password_confirmation,:current_password]
      devise_parameter_sanitizer.permit :account_update, keys: update_attrs
    else
      update_attrs = [:password, :password_confirmation, current_password, 
      :phone]
      devise_parameter_sanitizer.permit :account_update, keys: update_attrs
    end
  end
end

用户注册控制器

class Users::RegistrationsController < Devise::RegistrationsController
...
...
end

管理员注册控制器

class Admins::RegistrationsController < Devise::RegistrationsController
...
...
end

当然,您必须使用为您自己的模型配置的参数