Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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中实现这种渐进参与/延迟注册?_Ruby On Rails_User Experience_Lazy Registration - Fatal编程技术网

Ruby on rails 如何在Rails中实现这种渐进参与/延迟注册?

Ruby on rails 如何在Rails中实现这种渐进参与/延迟注册?,ruby-on-rails,user-experience,lazy-registration,Ruby On Rails,User Experience,Lazy Registration,很久以前,我遇到了一个网站(不幸的是,我丢失了地址,它是某种报纸网站),允许你像注册用户一样利用一切。您可以对文章进行评分、收藏和评论,当您这样做时,会显示一条谨慎的嵌入消息,告诉您必须注册到网站才能保存您的贡献。然后,它有一个链接,你可以看到你的个人资料会是什么样子,如果你这样做了,我很惊讶地看到它有我所有的活动在那里;我阅读并保存的文章、评论等。我离开了网站,后来出于好奇回到网站时,我的活动仍然保存了下来 我认为这是有史以来最伟大的事情,现在我正在建设一个具有社会功能的网站,我也想采取这种方

很久以前,我遇到了一个网站(不幸的是,我丢失了地址,它是某种报纸网站),允许你像注册用户一样利用一切。您可以对文章进行评分、收藏和评论,当您这样做时,会显示一条谨慎的嵌入消息,告诉您必须注册到网站才能保存您的贡献。然后,它有一个链接,你可以看到你的个人资料会是什么样子,如果你这样做了,我很惊讶地看到它有我所有的活动在那里;我阅读并保存的文章、评论等。我离开了网站,后来出于好奇回到网站时,我的活动仍然保存了下来


我认为这是有史以来最伟大的事情,现在我正在建设一个具有社会功能的网站,我也想采取这种方法。但我仍然是个不折不扣的人,所以我不知道该怎么做你会怎么做?

我会创建一个
配置文件
模型,该模型会自动为访问你网站的任何用户创建,并添加第一个收藏夹、对第一个项目进行评分等。
配置文件
应保存到你的数据库中,包括一个适当的随机和唯一字符串。此字符串可以作为cookie存储在客户端,稍后将用于检索您的配置文件。它应该是随机的,并且足够长,这样你就不能轻易地篡改你的cookie并获取其他匿名用户的个人资料,但这并不是完全可以避免的(所以请注意,在匿名个人资料中不存储敏感数据!)

用户注册后,您可以将其
配置文件
与其新的
用户
记录关联,并删除cookie和唯一的字符串标识符。现在,您只需在他们登录时根据他们的
用户
记录检索他们的配置文件即可

配置文件
模型可以包含您想要存储的任何信息

如果要区分注册用户和匿名用户,可以创建
匿名配置文件
模型和
配置文件
模型(每个模型具有不同的属性),并在用户注册时将匿名配置文件中的所有数据复制到用户配置文件中

更新: 在整个应用程序中,您可以决定仅在用户登录时使用此信息。您可以在_filter之前定义一个获取当前用户的
,并且仅当有实际用户登录时,才使用配置文件数据:

class ApplicationController < ActionController::Base
  before_filter :fetch_user_data

  def fetch_user_data
    @current_user = ... # Work your magic to get current user
  end

  private

  def current_profile
    @current_user and @current_user.profile  # Use profile association
  end
end

如果您改变主意并希望匿名配置文件对您的匿名用户生效,您可以稍后更改当前配置文件的实现。

识别用户的唯一方法是使用cookie。您正在使用的站点可能会执行以下操作:

用户首次在“用户”表中创建一个条目,并将其添加到“来宾”组。将标识符cookie保存到用户计算机,以便以后可以再次查找它们

如果用户决定注册,您可以在用户表中填写他们的其他详细信息(您甚至可能希望为用户详细信息和注册详细信息(如用户名/密码等)创建一个单独的表),并将其添加到注册用户组中

管理组的方式可以像数据库中的标志一样简单

因为这是一个rails问题

我可能会在应用程序_controller.rb中的before_过滤器中处理大部分问题。步骤如下:

if has_cookie
   @user = lookup_user
else
   @user = create_new_guest_user
end

您可以很容易地扩展现有的身份验证框架之一,如acts_as_authenticated或clearance来实现这一点

谢谢,听起来不错。但是,在用户注册之前,不将活动实际应用到网站上如何?抱歉,如果这是一个愚蠢的问题,但从你的回答中我看不出这一点。谢谢你的回答,听起来很有希望。例如,我不太熟悉restful_身份验证,但由于管理组“可以像数据库中的标志一样简单”,我想我可以使用它来设置权限,防止来宾的活动在注册之前被保存,对吗?我的意思是,在应用程序/插件的角色和权限部分应该做些什么。保存我的意思是,实际影响网站。例如,在用户注册之前,未计算选票或未实际出现评论。
if has_cookie
   @user = lookup_user
else
   @user = create_new_guest_user
end