`
pure
  • 浏览: 354283 次
社区版块
存档分类
最新评论

如何合理的实现用户注册信息收集

阅读更多
在做注册用户管理时,常见做法是,一个User对象包括了用户的所有属性,比如:用户登陆名、密码、爱好、特长、邮箱、性别、年龄、地址、电话等等信息。

结果就是这个表的字段非常多:

  create_table "users", :force => true do |t|
    t.string   "login"
    t.string   "crypted_password",          :limit => 40
    t.string   "salt",                      :limit => 40
    t.string   "remember_token"
    t.datetime "remember_token_expires_at"
    t.boolean  "is_admin"
    t.boolean  "can_send_messages",                       :default => true
    t.string   "time_zone",                               :default => "UTC"
    t.string   "email_verification"
    t.boolean  "email_verified"

    t.string   "first_name"
    t.string   "last_name"
    t.string   "website"
    t.string   "blog"
    t.string   "flickr"
    t.text     "about_me"
    t.string   "aim_name"
    t.string   "gtalk_name"
    t.string   "ichat_name"
    t.string   "icon"
    t.string   "location"
    t.string   "email"
    t.boolean  "is_active",        :default => false
    t.string   "youtube_username"
    t.string   "flickr_username"

    t.datetime "created_at"
    t.datetime "updated_at"
  end



另外一种做法是分成User和Profile两个对象,用户注册的时候只需填写简单的用户名和密码(邮箱)信息就可以完成注册,Profile信息则注册完成后,用户根据需要来填写,非强制性的,这样用户也乐意注册。同时User信息来了也方便和其它系统集成,比如要加入论坛等功能时。参考lovd-by-less的做法:

create_table "profiles", :force => true do |t|
    t.integer  "user_id"
    t.string   "first_name"
    t.string   "last_name"
    t.string   "website"
    t.string   "blog"
    t.string   "flickr"
    t.text     "about_me"
    t.string   "aim_name"
    t.string   "gtalk_name"
    t.string   "ichat_name"
    t.string   "icon"
    t.string   "location"
    t.string   "email"
    t.boolean  "is_active",        :default => false
    t.string   "youtube_username"
    t.string   "flickr_username"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "profiles", ["user_id"], :name => "index_profiles_on_user_id"

  create_table "users", :force => true do |t|
    t.string   "login"
    t.string   "crypted_password",          :limit => 40
    t.string   "salt",                      :limit => 40
    t.string   "remember_token"
    t.datetime "remember_token_expires_at"
    t.boolean  "is_admin"
    t.boolean  "can_send_messages",                       :default => true
    t.string   "time_zone",                               :default => "UTC"
    t.string   "email_verification"
    t.boolean  "email_verified"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "users", ["login"], :name => "index_users_on_login"


表结构是这样的,同时增加User Profile两个模型,在注册的时候,注册完保存用户基本信息的同时创建Profile信息,使User和Profile关联起来,这样就知道profile属于那个用户了。
class Profile < ActiveRecord::Base
  belongs_to :user
end


class User < ActiveRecord::Base
  has_one :profile, :dependent => :nullify #删除user时,将profile的user_id设置为null

  attr_accessor :email

  def before_create
    p = Profile.find_by_email @email
  end

  def after_create
    p = Profile.find_or_create_by_email @email
    raise 'User found when should be nil' unless p.user.blank?
    p.is_active=true #默认是否激活
    p.user_id = id #用户的id
    p.save
  end

end


以后,比如用户的博客、朋友、消息、相册都与Profile关联,不直接与User关联。
分享到:
评论
7 楼 木剑先生 2009-09-12  
你注册的时候一定要把User的所有属性显示出来要用户填写么?可以只写一部分么,没必要这么麻烦做one to one association,其他个人信息可以在作个人资料的修改时候填写
6 楼 qianjigui 2009-07-20  
<div class="quote_title">qichunren 写道</div>
<div class="quote_div">感觉 标题是讲web用户体验,而 内容是讲技术实现。<br><br>对于 如何合理的实现用户注册信息收集?<br>我自己从来不想让用户的注册过程变得麻烦,我不会让他要填写一大堆的个人信息 才能完成注册,注册信息越简单越好,等他注册好了,可以通过可以手段来让用户去填充 个人资料信息。 关于这个,好像以前在讨论过。</div>
<p>确实有一点遗憾,不过看看构造思路还是很不错的。</p>
<p> </p>
<p>另外关于系统相关操作信息的统计,我觉得是个非常好的讨论话题,也是很多研究人员长期从事的。</p>
<p>google没放弃任何一个细节,才让今天的使用非常人性化。</p>
<p>我也在考虑后续的系统开发中多注意收集数据,在《rails recipes》里面有关于catch 404的相关讨论,这个思路可以借鉴和传承。如果在使用Catch 404的时候,会发现系统升级后的一些问题。例如当时在看到javaeye的路由配置信息时候,发现他们在做REST迁移时候对于以前url路径的保存,很大的一方面是为了和google缓存提供服务。</p>
5 楼 pure 2009-07-16  
mccxj 写道
下一站,火星 写道
把经常用到的用户字段放到一个表里面,反之放到一个表里面

同上,楼主似乎说不到点上

其实吧,我也是分析lovd-by-less得出做法,感觉这种做法很不错,就推荐在这里。
4 楼 mccxj 2009-07-16  
下一站,火星 写道
把经常用到的用户字段放到一个表里面,反之放到一个表里面

同上,楼主似乎说不到点上
3 楼 下一站,火星 2009-07-16  
把经常用到的用户字段放到一个表里面,反之放到一个表里面
2 楼 qichunren 2009-07-16  
感觉 标题是讲web用户体验,而 内容是讲技术实现。

对于 如何合理的实现用户注册信息收集?
我自己从来不想让用户的注册过程变得麻烦,我不会让他要填写一大堆的个人信息 才能完成注册,注册信息越简单越好,等他注册好了,可以通过可以手段来让用户去填充 个人资料信息。 关于这个,好像以前在讨论过。
1 楼 jinleileiking 2009-07-15  
嗯。不错,回来试试。

相关推荐

    JSP和MYSQL实现用户注册

    ### JSP与MySQL实现用户注册的关键知识点 #### 一、JSP基础知识介绍 JSP(Java Server Pages)是一种基于Java的服务器端脚本技术,它允许开发者将动态内容嵌入到静态HTML页面中。JSP文件可以包含HTML、XML、...

    一个简陋的C#web用户注册代码

    在本项目中,我们关注的是一个使用C#编写的简单的Web用户注册系统。这个系统可能并不完善,但作为初学者或快速原型开发的起点,它提供了理解基础概念的机会。让我们深入探讨C# Web用户注册涉及的关键知识点。 1. **...

    基于MVC的登录注册的实现

    在本文中,我们将深入探讨...通过合理的设计和实现,我们可以构建出安全、高效、易维护的登录注册系统。在实际项目中,还需要结合具体的编程语言(如Java、C#等)和框架(如Spring MVC、ASP.NET MVC等)进行具体实现。

    设计用户注册页面

    在设计一个用户注册页面时,我们关注的焦点是创建一个友好、直观且安全的用户体验,同时确保收集到必要的用户信息。在这个场景中,用户需要填写的注册内容包括姓名、性别、出生年月以及兴趣爱好。当用户成功提交注册...

    电子网务网站用户注册详细信息的源代码,ASP.net编写

    通过合理的数据绑定和交互设计,不仅可以收集到用户必要的信息,也能提升用户的注册体验。对于开发者来说,理解和掌握这部分代码有助于提升在Web开发领域的技能,特别是在政府服务信息化或企业级应用开发中。

    flask实现用户登录注册、邮箱头像修改等操作

    在本文中,我们将深入探讨如何使用Python的Flask框架实现用户登录注册、密码邮箱修改以及头像修改上传等常见的Web应用程序功能。Flask是一个轻量级的Web服务器网关接口(WSGI)Web应用框架,它允许开发者用Python...

    HTML表单用户注册

    HTML表单是网页设计中的重要组成部分,主要用于收集用户输入的数据,如在用户注册场景中,表单用于获取用户的个人信息、账号信息等。本教程将详细讲解如何使用HTML创建用户注册表单,并结合CSS来美化表单的外观。 ...

    基于Web MVC系统架构实现的用户注册.docx

    本项目的目的是通过Web MVC(Model-View-Controller)系统架构来实现用户注册的功能。Web MVC是一种流行的软件设计模式,它将应用程序逻辑分为模型、视图和控制器三个部分,这种分离有助于提高代码的可维护性和可...

    用户注册及验证代码(连接数据库)

    这里的项目“用户注册及验证代码(连接数据库)”着重于实现这个功能,并且与数据库进行交互。下面我们将深入探讨这个系统的核心知识点。 首先,**用户注册**过程涉及收集用户的基本信息,如用户名、电子邮件、密码...

    springboot+mybatis整合实现注册登录

    "register.html"和"login.html"是用户界面文件,分别对应用户注册和登录的前端页面。这些HTML文件通常会包含表单元素,如输入框、按钮等,用于收集用户输入的注册信息(如用户名、密码、邮箱等)和登录凭证(如...

    网上图书查询系统(用户注册 对图书的查询)

    用户注册是系统的基础功能之一,它涉及用户信息的收集与验证。通常,注册过程包括填写用户名、密码、电子邮件等基本信息,并可能需要通过电子邮件或短信验证来确认用户的真实性。注册后的用户可以创建自己的账户,...

    Java Servlet实现用户增删查、分页,登录,注册等功能

    本教程将详细介绍如何使用Java Servlet实现用户管理系统的各项功能,包括用户增删查改、分页、登录和注册。 一、用户增删查改 1. 增加用户:首先,创建一个User类,包含用户名、密码等属性。然后,在Servlet中创建...

    购物车和用户注册.rar

    在本项目中,“购物车和用户注册.rar”包含两个核心功能:购物车管理和用户注册。这两个功能是电子商务网站中至关重要的部分,对于提供流畅、安全的用户体验至关重要。 首先,我们来详细探讨购物车功能。购物车页面...

    基于Java用户注册管理系统实训报告.pdf

    这个基于Java的用户注册管理系统实训报告详尽阐述了系统的设计与实现过程,从需求分析到功能设计,再到数据库和界面的实现,为读者提供了一个完整的开发案例,有助于理解如何利用Java技术构建实际的管理信息系统。...

    jQuery分步骤用户注册表单代码

    jQuery作为一种强大的JavaScript库,能够简化网页动态交互和DOM操作,是实现分步骤用户注册表单的理想工具。本文将深入探讨如何利用jQuery实现这种功能,以及相关文件结构的作用。 首先,我们来看"jQuery分步骤用户...

    车辆信息采集管理系统.zip

    车辆信息采集管理系统是一个基于人工智能技术的信息管理系统项目,旨在利用现代技术手段实现对车辆信息的高效、精准管理和分析。系统分析与设计在这个项目中扮演着关键角色,它涉及到系统的功能规划、架构搭建以及...

    基于android的简单用户注册系统课程设计报告.pdf

    综上所述,这个基于Android的简单用户注册系统,通过合理的界面设计和编程实现,满足了用户的基本需求,同时也为开发者提供了学习和实践Android应用开发的机会。在实际开发中,还需要考虑更多因素,如数据加密、用户...

    ASP.Net用户注册.txt

    在Web开发中,用户注册是实现用户身份验证的基础。通过用户注册,系统可以收集用户的个人信息(如用户名、密码等),并存储这些信息供后续登录验证使用。 #### 三、ASP.NET用户注册页面分析 给定的部分内容展示了一...

    用户注册验证

    在多种情况下,用户注册验证可能有不同的实现方式和策略,以下将详细讨论相关知识点。 1. **邮箱验证**:许多网站在用户注册时会要求提供有效的电子邮箱地址,并发送一封包含验证码的邮件。用户需要在规定时间内...

    用户注册+登录 JavaWeb项目压缩包

    在本JavaWeb项目中,"用户注册+登录"功能是基于MyBatis框架实现的,这是一个轻量级的持久层框架,它允许开发者将SQL语句直接映射到Java代码中,大大简化了数据访问层的开发工作。下面将详细阐述这个项目中涉及的技术...

Global site tag (gtag.js) - Google Analytics