我有一个设计用户模型和设计管理模型,每个都有嵌套属性,因此我需要覆盖每个单独的模型来修改强参数,以便我的嵌套属性将通过。
我该怎么做呢?我已经覆盖了其中一个注册控制器并且它完美地工作了,但是,如果我复制它并将控制器名称设置为AdminregistrationsController < Devise::RegistrationsController
(因为我当然不能有两个叫RegistrationsController
那么它没有用。
任何建议都会很棒。
答案 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_parameters 方法放在应用程序控制器中,因为多个设备控制器肯定需要这些参数
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
当然,您必须使用为您自己的模型配置的参数