Ruby on Rails,设计:如何添加用户名和用户名详细信息?需要关系数据库架构

时间:2011-12-15 07:12:48

标签: ruby-on-rails database postgresql database-design devise

\ d用户

                                           Table "public.users"
         Column         |            Type             |                     Modifiers                      
------------------------+-----------------------------+----------------------------------------------------
 id                     | integer                     | not null default nextval('users_id_seq'::regclass)
 email                  | character varying(255)      | not null default ''::character varying
 encrypted_password     | character varying(128)      | not null default ''::character varying
 reset_password_token   | character varying(255)      | 
 reset_password_sent_at | timestamp without time zone | 
 remember_created_at    | timestamp without time zone | 
 sign_in_count          | integer                     | default 0
 current_sign_in_at     | timestamp without time zone | 
 last_sign_in_at        | timestamp without time zone | 
 current_sign_in_ip     | character varying(255)      | 
 last_sign_in_ip        | character varying(255)      | 
 created_at             | timestamp without time zone | 
 updated_at             | timestamp without time zone | 
Indexes:
    "users_pkey" PRIMARY KEY, btree (id)
    "index_users_on_email" UNIQUE, btree (email)
    "index_users_on_reset_password_token" UNIQUE, btree (reset_password_token)

\ d发布

                                   Table "public.posts"
   Column    |          Type          |                     Modifiers                      
-------------+------------------------+----------------------------------------------------
 id          | integer                | not null default nextval('posts_id_seq'::regclass)
 title       | character varying(100) | not null
 content     | character varying(500) | not null
 created_at  | date                   | 
 updated_at  | date                   | 
 tags        | character varying(55)  | not null default '50'::character varying
 category_id | integer                | not null default 1
Indexes:
    "posts_pkey" PRIMARY KEY, btree (id)

我需要跟踪谁发帖子,所以我需要帖子表中的用户名栏。 Shoud我在posts表中添加了一个用户名列,或者我应该在users表中添加用户名,还是应该使用username为userdetails创建一个不同的表。

我还需要检查用户是管理员还是普通用户。

任何人都可以为此目的发布完整的关系数据库架构吗?

设计用户模型

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me

end

1 个答案:

答案 0 :(得分:2)

您不希望在posts表中使用用户名,只需要用户的ID即可。用户名将放在users表中。

对于您的users表,您希望在表创建中使用它:

t.string, :username, :null => false
如果要限制长度,请

:limit。然后在你的User课程中:

validates :username, :uniqueness => { :case_sensitive => false }
has_many :posts

如果您不希望用户名是唯一的,那么您可以删除validates :username;您还可以在before_validate挂钩中记下用户名,并在username上为您的users表添加唯一索引。您可能需要has_many上的一些标记,有关详细信息,请参阅the guide

然后,在创建posts

t.integer, :user_id, :null => false

Post

belongs_to :user

然后,您可以通过user

获取帖子的用户名
p.user.username

如果您尝试将用户名添加到现有数据中,则在迁移新列时需要:null => true,并且您必须弄清楚要对自己的缺失值做什么现有数据。

我不知道如何将其与设计集成(抱歉,我不使用它),或者如果设计甚至会关心用户名。希望其他人可以填写设计部分(如果有的话)并留下评论,如果他们这样做。