Devise Ruby on Rails 中的 build_resource 和资源是什么?

Jos*_*vel 3 ruby ruby-on-rails devise

我在哪里可以使用 Devise gem 更改要保存的验证?我找到了这个表格:

def create
  build_resource(sign_up_params)
  if resource.valid?
    super
  else
    render :new
  end
end
Run Code Online (Sandbox Code Playgroud)

但我发现与此类似:

def create
  @user = User.new(user_params)

  respond_to do |format|
    if @user.save
      format.html { redirect_to @user, notice: 'User was successfully created.' }
    format.json { render :show, status: :created, location: @user }
    else
      format.html { render :new }
      format.json { render json: @user.errors, status: :unprocessable_entity }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

Ale*_*tos 5

设计适用于任何模型,不是强制性的User。一个非常常见的例子是拥有UserAdminUser

如果 Devise 被硬编码为您所展示的 ( User.new),这意味着它永远不会适用于不同的模型,也不会允许您登录到您的 web 应用程序的不仅仅是一个模型。知道这一点,resource代表您已添加devise到的模型,即登录。在您的情况下:

 build_resource(sign_up_params) # will be the similar to user = User.new(sign_up_params)
 resource # will be an instance of User
 resource.valid? # will be the name as user.valid?
Run Code Online (Sandbox Code Playgroud)

由于它使用resource.valid?,您只需要在模型中实现验证UserAdminUser无需更改设计中的任何代码。