我正在创建一个网络应用程序来学习 Ruby on rails。该应用程序允许用户登录并在画布上绘图。我希望用户能够通过特定于用户作品编号的唯一生成的 URL 分享杰作。艺术品的创建者也应该可以选择用密码保护 URL。我不需要在 Facebook 或 LinkedIn、twitter 或类似的东西上共享 URL。只想要一个可以通过电子邮件或短信等发送的纯 URL。
我应该使用什么方法来实现这一点?是否有任何宝石可以轻松实现此功能?任何设计建议和智慧将不胜感激。谢谢你!
我正在创建一个网络应用程序来学习 Ruby on rails。该应用程序允许用户登录并在画布上绘图。我希望用户能够通过特定于用户作品编号的唯一生成的 URL 分享杰作。艺术品的创建者也应该可以选择用密码保护 URL。我不需要在 Facebook 或 LinkedIn、twitter 或类似的东西上共享 URL。只想要一个可以通过电子邮件或短信等发送的纯 URL。
我应该使用什么方法来实现这一点?是否有任何宝石可以轻松实现此功能?任何设计建议和智慧将不胜感激。谢谢你!
您可以在您的杰作模型上使用一个布尔值,称为 public。如果图片是公开的,那么任何人都可以访问它。但是,如果它不是公开的,那么使用您的返回 URL 将不会做任何事情。
您的公共网址可以通过哈希创建。我通常喜欢在创建模型时创建哈希令牌。
rails g migration add_hash_token_to_masterpieces hash_token
在您的模型中,您可以使用该before_create
方法调用私有方法,该方法将使用随机十六进制更新您的 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"
然后在您的控制器中,您可以拥有哈希令牌的 find 方法,并拥有相应的视图来为公共用户显示图像。注意_and_public
只查找公开的。即使哈希有效,如果杰作不公开,它也不会返回记录。
def public_masterpiece
@masterpiece = Masterpiece.find_by_hash_token_and_public(params[:hash_token], true)
...
end
然后在您的杰作视图中,您可以拥有一个名为的文件,该文件public_masterpiece.html.erb
是为尚未拥有授权帐户但仍可以查看图片的用户提供的特定渲染。如果您使用 cancan 之类的 gem 进行授权,则需要确保允许 public_masterpiece 操作。