The build_resource
Devise::RegistrationsController( 中的方法github https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb ),
def build_resource(hash=nil)
self.resource = resource_class.new_with_session(hash || {}, session)
end
通过基于会话构建新资源。会话中的用户(在本例中)是管理员并且已登录。
您希望基于用户类的新用户实例而不是基于会话创建新用户。
像这样的东西应该有效。
class AdminsController < ApplicationController
def new_user
authorize! :manage, User
@user = Users.new
end
def create_user
@user = User.new(permitted_params.user)
authorize! :manage, User
if @user.save
#success
else
#error
end
end
end
路线.rb
get "admins/new_user" => "admins#new_user", as: :admins_new_user
post "admins/create_user/:id" = "admins/create_user", as: :admins_create_user
链接到新用户
<%= link_to "Create User", admins_new_user_path %>
Form
<%= form_for(@user, :url => admins_create_user_path) do |f| %>
#fields and submit
<% end %>
allowed_params.user 是 PermissibleParams 类中的一个方法,它可能对您来说很方便。
通过将 current_user 传递到方法中,您可以为不同的用户允许不同的参数。
模型/permissed_params.rb
class PermittedParams < Struct.new(:params, :current_user)
def user
params.require(:user).permit(*user_attributes)
end
def user_attributes
if current_user.admin?
[:name, :email,:password, :password_confirmation, :role ,:admin]
else
[ :name, :email, :remember_me,:password, :password_confirmation, ]
end
end
end