Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使URL中的id是随机的?_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby 如何使URL中的id是随机的?

Ruby 如何使URL中的id是随机的?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,因此,我正在寻找一种方法来创建一个随机id,该id将链接到一个大厅,该大厅将在rails中调用所示方法时显示。到目前为止,url将如下所示:。我想用一个随机生成的id来代替2,这样如果你想让朋友们加入你的大厅,你就可以把链接发送给他们。有什么想法吗 我不会给你完整的答案,因为学习这些东西很好,但是如果你有任何问题,请随时问我 这是您应该开始的地方: 这和你想要的很相似,看看你是否可以从那里扩展!如果您是Rails新手,请务必查看Railscasts。所有专业剧集都可以在youtube上免费观看

因此,我正在寻找一种方法来创建一个随机id,该id将链接到一个大厅,该大厅将在rails中调用所示方法时显示。到目前为止,url将如下所示:。我想用一个随机生成的id来代替2,这样如果你想让朋友们加入你的大厅,你就可以把链接发送给他们。有什么想法吗

我不会给你完整的答案,因为学习这些东西很好,但是如果你有任何问题,请随时问我

这是您应该开始的地方:


这和你想要的很相似,看看你是否可以从那里扩展!如果您是Rails新手,请务必查看Railscasts。所有专业剧集都可以在youtube上免费观看

我不会给你完整的答案,因为学习这些东西很好,但是如果你有任何问题,请随时问我

这是您应该开始的地方:


这和你想要的很相似,看看你是否可以从那里扩展!如果您是Rails新手,请务必查看Railscasts。所有专业剧集都可以在youtube上免费观看

正如加文所说,你应该分享更多的信息。了解您已经尝试过的内容可以帮助我们为您提供更多/更好的关于如何继续的信息

我希望这给你指明了正确的方向。要生成随机ID,您可以使用SecureRandom

我建议您在
大厅
表中添加另一列,并使其唯一:

add_column :lobbies, :secure_token, :string, null: false
add_index :lobbies, :secure_token, unique: true
现在,在您的
大厅
模型中,无论何时创建,您都可以生成一个唯一的令牌。为简单起见,您可以按照以下思路进行操作:

class Lobby < ActiveRecord::Base
  before_create :generate_unique_secure_token

  # Rest of the model's code

  private


  def generate_unique_secure_token
    begin
      self.secure_token = SecureRandom.urlsafe_base64
    end while self.class.exists?(secure_token: secure_token)
  end
end

正如加文所说,你应该分享更多的信息。了解您已经尝试过的内容可以帮助我们为您提供更多/更好的关于如何继续的信息

我希望这给你指明了正确的方向。要生成随机ID,您可以使用SecureRandom

我建议您在
大厅
表中添加另一列,并使其唯一:

add_column :lobbies, :secure_token, :string, null: false
add_index :lobbies, :secure_token, unique: true
现在,在您的
大厅
模型中,无论何时创建,您都可以生成一个唯一的令牌。为简单起见,您可以按照以下思路进行操作:

class Lobby < ActiveRecord::Base
  before_create :generate_unique_secure_token

  # Rest of the model's code

  private


  def generate_unique_secure_token
    begin
      self.secure_token = SecureRandom.urlsafe_base64
    end while self.class.exists?(secure_token: secure_token)
  end
end

我知道怎么做了。我很了解Rails,我知道怎么做。我很了解铁路汉克斯!我更喜欢自己学习,我只是不知道从哪里开始我只是更新了帖子。看看你能做什么!如果您有任何问题,请随时通过StackOverflow开始聊天谢谢!我更喜欢自己学习,我只是不知道从哪里开始我只是更新了帖子。看看你能做什么!如果您有任何问题,请随时通过StackOverflowHeads up开始聊天,
find_by_x
被视为反模式。首选的解决方案是
find\u by(安全令牌:)
SecureRandom::uuid
非常适合这种情况。只要确保你的系统有足够的熵!OP:这个答案是一个很好的起点!您可能会注意到,当您使用
Model.find()
时,如果找不到记录,它将抛出一个错误(异常)。但是,
Model.find_by()
不会引发异常!您可以使用
Model.find\u by使其引发异常!()
(注意结尾的砰砰声)你说得对,基兰。请随意编辑您的建议。@ChrisMartinez Kieran已经正确解释了原因。这只是一个安全网。您可以删除“null:false”并仅在模型中进行验证。您得到的错误可能是由于在已包含元素的表中创建了一个带有
null:false
的列而导致的。因此,您必须首先使用
null:true
创建列,迭代所有
大厅
,并生成它们的令牌。之后,您应该能够添加
null:false
约束。请注意,
find\u by_x
被视为反模式。首选的解决方案是
find\u by(安全令牌:)
SecureRandom::uuid
非常适合这种情况。只要确保你的系统有足够的熵!OP:这个答案是一个很好的起点!您可能会注意到,当您使用
Model.find()
时,如果找不到记录,它将抛出一个错误(异常)。但是,
Model.find_by()
不会引发异常!您可以使用
Model.find\u by使其引发异常!()
(注意结尾的砰砰声)你说得对,基兰。请随意编辑您的建议。@ChrisMartinez Kieran已经正确解释了原因。这只是一个安全网。您可以删除“null:false”并仅在模型中进行验证。您得到的错误可能是由于在已包含元素的表中创建了一个带有
null:false
的列而导致的。因此,您必须首先使用
null:true
创建列,迭代所有
大厅
,并生成它们的令牌。之后,您应该能够添加
null:false
约束。