你怎么能让URL中的id是随机的?

时间:2016-07-27 18:53:14

标签: ruby ruby-on-rails-3

所以我正在寻找一种创建随机id的方法,该id将链接到大厅,当在rails中调用所显示的方法时将显示该大厅。截至目前,网址将如下所示:http://localhost:3000/lobby/2。我希望用随机生成的ID替换那个2,这样你就可以将这个链接发送给朋友,如果你想让他们加入你的大厅。有任何想法吗?

2 个答案:

答案 0 :(得分:2)

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

我希望这能为您带来正确的方向。要生成随机ID,您可以使用 SecureRandom http://ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html

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

add_column :lobbies, :secure_token, :string, null: false
add_index :lobbies, :secure_token, unique: true

现在,在Lobby模型中,无论何时创建,您都可以生成唯一标记。为简单起见,您可以按照以下方式执行操作:

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

每次创建secure_token时,这将生成Lobby。现在,在控制器中,您可以使用secure_token代替id来查找Lobby。例如:

class LobbiesController < ApplicationController 
  def show
    @lobby = Lobby.find_by(secure_token: params[:id])
  end
end

答案 1 :(得分:0)

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

这是您应该开始的地方:URLSafe Base 64

Here's a Railscasts episode与您想要的相似,看看您是否可以从那里扩展!如果您是Rails的新手,请务必查看Railscast。所有专业剧集都可以在youtube上免费获得!