2015-04-14 15 views
0

Мое приложение имеет 5 основных моделей. Я пытаюсь найти лучший способ связать модели. Сколько таблиц мне нужно создавать и какой вид и т. Д.?Какую ассоциацию я должен использовать?

Вот ассоциации, я хотел бы включить и их соответствующие модели:

Пользователь
Имеет много досок
Имеет много списков
Имеет много карт
Имеет много комментариев

Совет
Имеет много пользователей
Имеет много списков
Имеет много карт

Список
Принадлежит борт
имеет много карт

Card
Принадлежит борт
Принадлежит к списку
Имеет много комментариев

Комментарий
Принадлежит карты
Принадлежит пользователю

+0

Я смущен, потому что вы спрашиваете «какие ассоциации я должен использовать», а затем вы указываете точные ассоциации, которые хотите использовать. Использовать эти ассоциации? – sevenseacat

ответ

2
class User < ActiveRecord::Base 
    has_and_belongs_to_many :boards 
    has_many :lists, as: listable 
    has_many :cards, as: cardable 
    has_may :comments, as: commentable 
end 

class Board < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    has_many :lists, as: listable 
    has_many :cards, as: cardable 
end 

class Comment < ActiveRecord::Base 
    belongs_to :commentable, :polymorphic => true 
end 

class List < ActiveRecord::Base 
    belongs_to :listable, :polymorphic => true 
    has_many :cards, as: cardable 
end 

class Card < ActiveRecord::Base 
    belongs_to :cardable, :polymorphic => true 
    has_many :comments, as:commentable 
end 

Чтобы установить HABTM отношение вы должны создать таблицу с именем «users_boards»

+0

Это выглядит удивительным чуваком, спасибо. Могу ли я затруднить вам объяснение правильного schema.rb? Нужен ли в списке список столбцов? Требуется ли карточке столбец идентификатора списка и т. Д.? – colmtuite

+0

для модели «Comment», вам нужно добавить столбец «commentable_id». Пожалуйста, сделайте то же самое для всех полиморфных таблиц. – Jyothu

0

Как совета и Пользователем, имеющие отношения многие ко многим, будет новая таблица для этого, если вы хотите HABTM вы можете использовать его.

пользователя (идентификатор, имя, other_attributes ...)

Board (номер, имя, ...)

List (идентификатор, имя, user_id (FK), ...)

карты (номер, имя, user_id (FK), list_id (Ф.К.), board_id (Ф.К.), ...)

Комментарии (идентификатор, comment_msg, user_id (FK), card_id (Ф.К.), ...)

Board_User (board_id (fk), user_if (fk)) --- Отношение MM

Немногие атрибуты могут измениться, если есть отношение has_many.

FK-- Иностранный ключ, вы можете использовать has_many в зависимости от ваших требований.

+0

Что означает «(fk)»? Должен ли я использовать отношения has_many, как вы упомянули? – colmtuite

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