2016-01-08 2 views
1

Я пытаюсь создать иерархию модели базы данных и миграцию для своей базы данных для приложения для группового чата, и я новичок в рельсах, поэтому я довольно смущен тем, как я должен строить этот ... Любое руководство будет принята с благодарностью!Циркулярные зависимости моделей с рубинами на рельсах

Он распадается следующим образом:

< Группы ==> Пользователи < ==> Сообщения
Группы ==> Сообщения

Так группы имеют кучу пользователей и пользователи имеют кучу групп, но также группы имеют должности, которые делают пользователи. Каждое сообщение принадлежит одной группе и одному пользователю. Сообщение должно также содержать ссылку на пользователя, который опубликовал его.

Должен ли я просто сделать объединенную таблицу всех 3? Это практично/эффективно?

Я просто запутался, где я должен использовать belongs_to, has_one, has_many, has_and_belongs_to_many и как я должен писать файлы миграции ...

спасибо за любую помощь загодя

+0

Забудьте о рельсах. Сначала решите, какую функцию вы хотите, и узнайте, какие организации зарегистрированы в этом. После этого выясните связь между каждой сущностью. После этого можно определить список атрибутов этого объекта. –

ответ

2

вы можете это сделать в следующем пути

Группы

has_and_belongs_to_many :users 
has_many :posts 

Пользователи

has_and_belongs_to_many :groups 
has_many :posts 

Сообщений

belongs_to :group 
belongs_to :user 

posts таблица должна иметь group_id и user_id столбцы также создать таблицу groups_users миграция:

class CreateGroupsUsers < ActiveRecord::Migration 
    def change 
    create_table :groups_users, id: false do |t| 
     t.references :group, index: true 
     t.references :user, index: true 
    end 
    end 
end 

Это должно работать!

EDIT

для добавления ассоциации между Пользователем и Группа:

group = Group.create(name: 'New Group') 
user = User.last 
user.groups << group 

или

user.build_group(name: 'New Group') 
user.save 

или вы можете использовать nested_attributes

User.create(params[:user]) 

, где params[:user] = {user_name: 'James Bond', group_attributes: {name: 'New Group'}}

+0

Спасибо, куда входит таблица groups_users? – Riptyde4

+0

вы должны создать эту таблицу без модели. HABTM работает таким образом. [LOOK HEAR] (http://guides.rubyonrails.org/association_basics.html # the-has-and-belongs-to-many-association) –

+0

Нужно ли мне что-то помещать в файлы миграции пользователя/группы для его поддержки? – Riptyde4

Смежные вопросы