ruby-on-rails - Devise Ruby on Rails 中的 build_resource 和 resource 是什么?

标签 ruby-on-rails ruby devise

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

def create
  build_resource(sign_up_params)
  if resource.valid?
    super
  else
    render :new
  end
end

但我发现的是类似这样的:

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

最佳答案

Devise 可以与任何模型一起使用,User 不是强制性的。一个非常常见的例子是有 UserAdminUser

如果像您展示的那样将 Devise 硬编码为 (User.new),则意味着它永远不会适用于不同的模型,也不会允许您拥有多个模型登录你的网络应用程序。知道这一点后,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?

因为它使用了 resource.valid?,你只需要在模型 UserAdminUser 中实现验证,而不需要改变任何代码设计。

关于ruby-on-rails - Devise Ruby on Rails 中的 build_resource 和 resource 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46627016/

相关文章:

ruby-on-rails - 从 Ruby on Rails 应用程序将数据传递到 Flex 图表的最佳方法是什么?

ruby-on-rails - Rails cucumber 未定义方法 `config' 为 nil :NilClass (NoMethodError)

email - 网络::SMTPAuthenticationError

ruby-on-rails-3 - Sinatra Warden 与使用 Devise 的现有 Ruby on Rails 应用程序

ruby-on-rails - Rails - 设计登录/身份验证失败不会使用消息填充错误数组

ruby-on-rails - 刺激 Controller 未加载

ruby-on-rails - 如何在 Windows 上的一个地方运行 Ruby 和 GIT 命令

ruby-on-rails - 阵列::包括?在 ActiveRecord 集合上不调用 op==?

ruby-on-rails - 如何在 Assets 管道中使用图标?

ruby-on-rails - 设计两种不同型号的单独 checkout