我正在创建一个Web应用程序来学习Ruby on rails。该应用程序允许用户登录并在画布上绘图。我希望用户能够通过特定于用户艺术作品编号的唯一生成的URL来共享杰作。艺术作品的创建者也应该选择密码保护URL。我不需要在Facebook或LinkedIn,Twitter或类似的东西上共享URL。只需要一个可以通过电子邮件发送或发送短信等的简单URL。
我应该用什么方法来实现这个?是否有任何宝石可以轻松开箱即用?任何设计建议和智慧将不胜感激。谢谢!
答案 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操作。