Ruby on rails 在更新属性时添加随机字符串

Ruby on rails 在更新属性时添加随机字符串,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在寻找一种方法,可以在更新记录时在电子邮件字段的开头生成一个随机字符串 def update @user = User.find_by_id(4) @user.email = #method to update email with random string end 所以如果我有电子邮件记录abc@gmail.com我想这样更新它: dssaakj123_abc@gmail.com 如何在rails中实现它 (1..8).map{|i| ('a'..'z').to_a[rand

我正在寻找一种方法,可以在更新记录时在电子邮件字段的开头生成一个随机字符串

def update
  @user = User.find_by_id(4)
  @user.email = #method to update email with random string
end
所以如果我有电子邮件记录
abc@gmail.com
我想这样更新它:

dssaakj123_abc@gmail.com
如何在rails中实现它

(1..8).map{|i| ('a'..'z').to_a[rand(26)]}.join
8是要随机生成的字符数


8是要随机生成的字符数。

您可以使用
SecureRandom
库:

@user.email = "#{SecureRandom.hex(10)}_#{user.email}"

您可以使用
SecureRandom
库:

@user.email = "#{SecureRandom.hex(10)}_#{user.email}"

在应用程序控制器中创建如下操作:

private 
  def generate_random_string
    SecureRandom.urlsafe_base64(nil, false)
  end
并在您想要的任何控制器中使用它:

def update
  @user = User.find_by_id(4)
  @user.email = generate_random_string + @user.email
end

在应用程序控制器中创建如下操作:

private 
  def generate_random_string
    SecureRandom.urlsafe_base64(nil, false)
  end
并在您想要的任何控制器中使用它:

def update
  @user = User.find_by_id(4)
  @user.email = generate_random_string + @user.email
end

为什么不使用
SecureRandom

require 'securerandom'
random_string = SecureRandom.hex # provide argument to limit the no. of characters

# outputs: 5b5cd0da3121fc53b4bc84d0c8af2e81 (i.e. 32 chars of 0..9, a..f)
对于电子邮件之前的附加,您可以执行以下操作

@user.email = "#{SecureRandom.hex(5))_#{@user.email}" # 5 is no. of characters

希望有帮助

为什么不使用
SecureRandom

require 'securerandom'
random_string = SecureRandom.hex # provide argument to limit the no. of characters

# outputs: 5b5cd0da3121fc53b4bc84d0c8af2e81 (i.e. 32 chars of 0..9, a..f)
对于电子邮件之前的附加,您可以执行以下操作

@user.email = "#{SecureRandom.hex(5))_#{@user.email}" # 5 is no. of characters

希望有帮助

我希望这会对你有所帮助

def update
  @user = User.find_by_id(4)
  @user.email = "#{generate_random_string(8)}_#{@user.email}"
  ## You can pass any length to generate_random_string method, in this I have passed 8.
end

private

def generate_random_string(length)
  options = { :length => length.to_i, :chars => ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a }
  Array.new(options[:length]) { options[:chars].to_a[rand(options[:chars].to_a.size)] }.join
end

我希望这对你有帮助

def update
  @user = User.find_by_id(4)
  @user.email = "#{generate_random_string(8)}_#{@user.email}"
  ## You can pass any length to generate_random_string method, in this I have passed 8.
end

private

def generate_random_string(length)
  options = { :length => length.to_i, :chars => ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a }
  Array.new(options[:length]) { options[:chars].to_a[rand(options[:chars].to_a.size)] }.join
end


在更新之前将此方法添加到
将在每次更新时前置到当前电子邮件地址。导致
foo1\u foo2\u foo3_dipak@gmail.com
。我怀疑这是否有用或必要。您应该在创建之前使用
在创建之前操作
是控制器的一种方法,它与模型无关,但我认为它们需要相同的功能。@YuryLebedev,答案是:“在模型中更新之前”谢谢@TheCha͢mp修复了打字错误。在更新之前将此方法添加到
将在每次更新时在当前电子邮件地址前添加。导致
foo1\u foo2\u foo3_dipak@gmail.com
。我怀疑这是否有用或必要。您应该在创建之前使用
在创建之前操作
是控制器的一种方法,它与模型无关,但我认为它们需要相同的功能。@YuryLebedev,答案是:“在模型中更新之前”谢谢@TheCha͢mp纠正了打字错误。只是一件小事:我想如果问题的作者想在电子邮件地址前添加一个随机字符串,而不是在
@
completely@YuryLebedev是的,可能是这样。但他没有提到。可能是这样,他想在
@
之前替换。作者需要对此进行确认:(是的,你是对的。他在开头提到,他想在电子邮件的开头生成一个随机字符串。
。只是一件小事:我想如果问题的作者想在电子邮件地址前添加一个随机字符串,而不是在
@
之前替换整个字符串completely@YuryLebedev是的,可能是这样,但是他没有提到。可能是这样,他想在
@
之前替换。作者需要对此进行确认:(是的,你是对的。他在开头提到,他想在电子邮件的开头生成一个随机字符串。
。你检查过了吗?只要更新设置就行了。你打算在每次更新时用随机字符串预写电子邮件吗?我只会警告你,当前的解决方案都会导致每次更新电子邮件日期调用。导致
foo1\u foo2\u foo3\u100_champ@gmail.com
。我知道这确实是你想要的吗?你检查过了吗?只需更新设置就可以了。你想用随机字符串预先发送电子邮件一次还是每次更新都要这样做?我只想警告你,当前的解决方案都会导致在每次更新呼叫时更新电子邮件。导致
 foo1_foo 2_foo 3_..u foo 100_champ@gmail.com
.I这真的是你想要的吗?我如何才能只获得数字形式的随机字符串?使用
'%011d'%rand(1e10)
而不是
SecureRandom.hex(10)
。若要更改字符串中的位数,请在此处更改
e
之后的数字:
1e10
SecureRandom是的一部分,不需要活动支持。如何仅获取数字形式的随机字符串?请使用
'%011d'%rand(1e10)
而不是
SecureRandom.hex(10)
。若要更改字符串中的位数,请在此处更改
e
之后的数字:
1e10
SecureRandom是的一部分,不需要ActiveSupport。这如何以任何方式添加到现有答案?这如何以任何方式添加到现有答案?