如何给每个用户一个唯一的号码?

学习者丽兹

我有一个名为 user 的设计模型。当用户注册时,他们将被引导填写名为“userinfo”的表单。我有一个名为 userinfo 的模型。一旦创建了新的 userinfo,我就会给每个 userinfo 一个唯一的令牌。我允许在我的 userinfo 控制器中使用“令牌”。它有效,但每次我编辑表单和更新时,唯一的标记也会改变。我想我应该只在 userinfo#show 页面上显示第一个创建的令牌。但是,如果用户更新他们的 userinfo 表单 5 次,将创建 5 个令牌并浪费 4 个。

所以实际问题:当 userinfo#new 发生时创建唯一的令牌并将其显示在 userinfo#show 页面上。当 userinfo#edit 和 userinfo#update 发生时,不应更新唯一令牌。

我的用户信息模型:

class Userinfo < ActiveRecord::Base
    belongs_to :user

      before_save :set_token

      def set_token
        self.token = rand(100000..999999)
      end
end

用户信息控制器:

class UserinfosController < ApplicationController
    before_action :find_userinfo, only: [:show, :edit, :update, :destroy, :log_impression]
    before_action :authenticate_user!

    def index
      @userinfors = Userinfo.search(params[:search])
    end

    def show
    end

    def new
        @userinformation = current_user.build_userinfo
    end

    def create
        @userinformation = current_user.build_userinfo(userinfo_params)
        if @userinformation.save
          redirect_to userinfo_path(@userinformation)
        else
          render 'new'
        end
    end

    def edit
    end

    def update
        if @userinformation.update(userinfo_params)
            redirect_to userinfo_path(@userinformation)
        else
            render 'edit'
        end
    end

    def destroy
        @userinformation.destroy
        redirect_to root_path
    end

    private
        def userinfo_params
            params.require(:userinfo).permit(:name, :email, :college, :gpa, :major, :token, :skills, :user_img)
        end

        def find_userinfo
            @userinformation = Userinfo.friendly.find(params[:id])
        end
end

看法:

<%= @userinformation.token %>
维利安

尝试这样的事情:

def set_token
  self.token ||= rand(100000..999999)
end

||=说,“设置token一个随机数,除非token已经有值”(大致)。

顺便说一句,为了回应下面的评论和您原来的问题,确实使用:

rand(100000..999999)

不是个好主意。发现了两个问题:

  1. 生成的数字有可能不是唯一的,并且
  2. 您尝试分配非唯一数字的概率随着用户数量的增加而增加,一旦您拥有 999,999 个用户,则该概率将达到 100%。

如评论中所述,如果您不介意 UUID 的格式,则使用 SecureRandom.uuid 是一件好事:

ad9ed387-ec8e-4091-84b1-fe2ce2bbfcd4

在这种情况下,您会执行以下操作:

def set_token
  self.token ||= SecureRandom.uuid
end

顺便说一下,这就是我在代码中所做的。

使用 SecureRandom.uuid,您生成重复令牌的可能性非常小。但是,如果您担心这种非常小的机会,您还可以在数据库级别和模型中强制执行唯一性。如果您对答案感兴趣,这些是您可能想要发布的单独问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

每个用户一个或多个电话号码

来自分类Dev

如何通过用户的ip只为每个用户定义一个唯一的代码

来自分类Dev

如何为每个用户ASP.NET C#创建一个唯一的页面

来自分类Dev

创建一个“ repin”类型的动作,但为每个用户提供唯一的描述

来自分类Dev

为每个唯一的用户ID创建一个直方图频率向量R

来自分类Dev

创建一个“ repin”类型的动作,但为每个用户提供唯一的描述

来自分类Dev

如何每个用户只允许一个活动会话

来自分类Dev

如何每个用户只允许一个活动会话

来自分类Dev

如何为每个用户分配一个IP?

来自分类Dev

如何给每个用户一个免费的试用期

来自分类Dev

如何统计每个用户一个频道的消息数?

来自分类Dev

选择100个最后一个条目,每个唯一用户ID最多3个条目

来自分类Dev

无法生成唯一的用户号码

来自分类Dev

编码一组三个整数一个唯一的号码

来自分类Dev

如何以 bash 保留顺序获取列表的唯一值并保留每个唯一值的最后一个值?

来自分类Dev

每个用户一个房间?昂贵的?

来自分类Dev

如何使用“ adduser”创建一个带有额外字段(如“工作电话”号码)的用户?

来自分类Dev

每个唯一属性值获取一个对象

来自分类Dev

每个唯一ID的一个实例的boost :: serialization

来自分类Dev

每个唯一属性值获取一个对象

来自分类Dev

每个唯一ID的一个实例的boost :: serialization

来自分类Dev

在每个帖子中添加一个唯一的按钮

来自分类Dev

为每个唯一 ID 创建一个图

来自分类Dev

如何从SQL查询的每个唯一结果中提取第一个结果?

来自分类Dev

如何返回一个对象,该对象显示每个唯一值的总出现次数?

来自分类Dev

如何在JavaScript代码中为每个div分配一个唯一的ID?

来自分类Dev

如何为wordpress中的每个附件图片创建一个唯一的ID?

来自分类Dev

我如何通过一个唯一的用户名合并多个关联数组

来自分类Dev

有效地选择一个唯一的号码

Related 相关文章

  1. 1

    每个用户一个或多个电话号码

  2. 2

    如何通过用户的ip只为每个用户定义一个唯一的代码

  3. 3

    如何为每个用户ASP.NET C#创建一个唯一的页面

  4. 4

    创建一个“ repin”类型的动作,但为每个用户提供唯一的描述

  5. 5

    为每个唯一的用户ID创建一个直方图频率向量R

  6. 6

    创建一个“ repin”类型的动作,但为每个用户提供唯一的描述

  7. 7

    如何每个用户只允许一个活动会话

  8. 8

    如何每个用户只允许一个活动会话

  9. 9

    如何为每个用户分配一个IP?

  10. 10

    如何给每个用户一个免费的试用期

  11. 11

    如何统计每个用户一个频道的消息数?

  12. 12

    选择100个最后一个条目,每个唯一用户ID最多3个条目

  13. 13

    无法生成唯一的用户号码

  14. 14

    编码一组三个整数一个唯一的号码

  15. 15

    如何以 bash 保留顺序获取列表的唯一值并保留每个唯一值的最后一个值?

  16. 16

    每个用户一个房间?昂贵的?

  17. 17

    如何使用“ adduser”创建一个带有额外字段(如“工作电话”号码)的用户?

  18. 18

    每个唯一属性值获取一个对象

  19. 19

    每个唯一ID的一个实例的boost :: serialization

  20. 20

    每个唯一属性值获取一个对象

  21. 21

    每个唯一ID的一个实例的boost :: serialization

  22. 22

    在每个帖子中添加一个唯一的按钮

  23. 23

    为每个唯一 ID 创建一个图

  24. 24

    如何从SQL查询的每个唯一结果中提取第一个结果?

  25. 25

    如何返回一个对象,该对象显示每个唯一值的总出现次数?

  26. 26

    如何在JavaScript代码中为每个div分配一个唯一的ID?

  27. 27

    如何为wordpress中的每个附件图片创建一个唯一的ID?

  28. 28

    我如何通过一个唯一的用户名合并多个关联数组

  29. 29

    有效地选择一个唯一的号码

热门标签

归档