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。这如何以任何方式添加到现有答案?这如何以任何方式添加到现有答案?