如何在rails应用程序中处理共享唯一URL?

时间:2013-02-25 03:57:25

标签: ruby-on-rails ruby model-view-controller

我正在创建一个Web应用程序来学习Ruby on rails。该应用程序允许用户登录并在画布上绘图。我希望用户能够通过特定于用户艺术作品编号的唯一生成的URL来共享杰作。艺术作品的创建者也应该选择密码保护URL。我不需要在Facebook或LinkedIn,Twitter或类似的东西上共享URL。只需要一个可以通过电子邮件发送或发送短信等的简单URL。

我应该用什么方法来实现这个?是否有任何宝石可以轻松开箱即用?任何设计建议和智慧将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

你的杰作模型上有一个名为public的布尔值。如果图片是公开的,那么任何人都可以访问它。但是,如果它不是公开的,那么使用您的返回URL将无法执行任何操作。

您的公开网址可以通过哈希创建。我通常喜欢在创建模型时创建哈希标记。

rails g migration add_hash_token_to_masterpieces hash_token

在您的模型中,您可以使用before_create方法调用私有方法taht将使用随机十六进制更新您的hash_token。

  before_create :generate_hash_token

private

  def generate_hash_token
    begin
      self.hash_token = SecureRandom.hex
    end while self.class.exists?(hash_token: hash_token)
  end

然后在你的路线文件中,你可以做这样的事情

match "/public/:hash_token" => "masterpieces#public_masterpiece", as: "public"

然后在您的控制器中,您可以拥有哈希令牌的查找方法,并具有相应的视图以显示公共用户的图像。注意_and_public只发现那些公开的。即使散列有效,如果杰作不公开,它也不会返回记录。

def public_masterpiece
  @masterpiece = Masterpiece.find_by_hash_token_and_public(params[:hash_token], true)
  ...
end

然后在您的杰作视图中,您可以拥有一个名为public_masterpiece.html.erb的文件,该文件是尚未拥有授权帐户但仍可以查看图片的用户的特定渲染。如果您使用像cancan这样的宝石进行授权,您需要确保允许public_masterpiece操作。