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