\ 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
答案 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
,并且您必须弄清楚要对自己的缺失值做什么现有数据。
我不知道如何将其与设计集成(抱歉,我不使用它),或者如果设计甚至会关心用户名。希望其他人可以填写设计部分(如果有的话)并留下评论,如果他们这样做。