Ruby on Rails, разработка: Как я могу добавить имя пользователя и информацию об имени пользователя?Нужна схема реляционной базы данных - PullRequest
0 голосов
/ 15 декабря 2011

\ 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)

Мне нужно отслеживать, кто публикует сообщение, поэтому мне нужен столбец с именем пользователя в таблице сообщений. Должен ли я добавить столбец имени пользователя в таблицу сообщений, или я должен добавить имя пользователя в таблицу пользователей, или я должен создать другую таблицу для userdetails с именем пользователя.

Мне также нужно проверить, является ли пользователь администратором или обычным пользователем.

Может ли кто-нибудь опубликовать для этой цели полную схему реляционной базы данных?

devise Модель пользователя

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 Ответ

2 голосов
/ 15 декабря 2011

Вы не хотите, чтобы имя пользователя в вашей таблице posts, вы просто хотите идентификатор пользователя.Имя пользователя будет указано в вашей таблице 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, подробности см. в руководстве .

Затем при создании posts:

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

и в Post:

belongs_to :user

Затем вы можете получить имя пользователя для сообщения через его user:

p.user.username

Если вы пытаетесь добавить имена пользователей к существующим данным, тогда вам нужновам нужно :null => true в ваших миграциях для новых столбцов, и вам придется выяснить, что вы хотите сделать с отсутствующими значениями в ваших существующих данных.

Я не знаю, как все это интегрируетсяс devise (извините, я им не пользуюсь) или, если devise позаботится даже об именах пользователей.Надеюсь, кто-то еще может заполнить части устройства (если таковые имеются) и оставить мне комментарий, если они это сделают.

...