Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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 on rails 如何在rails应用程序中共享唯一URL?_Ruby On Rails_Ruby_Model View Controller - Fatal编程技术网

Ruby on rails 如何在rails应用程序中共享唯一URL?

Ruby on rails 如何在rails应用程序中共享唯一URL?,ruby-on-rails,ruby,model-view-controller,Ruby On Rails,Ruby,Model View Controller,我正在创建一个web应用程序来学习RubyonRails。该应用程序允许用户登录并在画布上绘制。我希望用户能够通过一个特定于用户艺术品编号的唯一生成的URL来共享杰作。艺术品的创建者也应该可以选择对URL进行密码保护。我不需要在Facebook、LinkedIn、twitter或其他类似网站上共享URL。只需要一个简单的网址,可以通过电子邮件或短信等 我应该使用什么方法来实现这一点?有没有什么宝石可以让这个功能很容易地开箱即用?任何设计建议和智慧将不胜感激。谢谢大家! 您的杰作模型上可以有一个名

我正在创建一个web应用程序来学习RubyonRails。该应用程序允许用户登录并在画布上绘制。我希望用户能够通过一个特定于用户艺术品编号的唯一生成的URL来共享杰作。艺术品的创建者也应该可以选择对URL进行密码保护。我不需要在Facebook、LinkedIn、twitter或其他类似网站上共享URL。只需要一个简单的网址,可以通过电子邮件或短信等


我应该使用什么方法来实现这一点?有没有什么宝石可以让这个功能很容易地开箱即用?任何设计建议和智慧将不胜感激。谢谢大家!

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

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

rails g迁移将\u散列\u标记添加到\u杰作散列\u标记中

在您的模型中,您可以使用
before\u create
方法调用私有方法,taht将使用随机十六进制更新哈希令牌

  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
然后在routes文件中,可以执行以下操作

match”/public/:hash_token“=>“杰作#public_杰作”,如:“public”

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

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

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

谢谢。那么,究竟什么URL是可共享的呢?所有唯一的URL将保存在哪里?URL是通过模型中的哈希令牌动态生成的。网址是