colmtuite
colmtuite

Reputation: 4491

Which Association Should I Use?

My app has 5 core models. I'm trying to figure out the best way to associate the models. How many tables should I build and which kind etc?

Here are the associations I would like to include and their respective models:

User
Has many boards
Has many lists
Has many cards
Has many comments

Board
Has many users
Has many lists
Has many cards

List
Belongs to board
Has many cards

Card
Belongs to board
Belongs to list
Has many comments

Comment
Belongs to card
Belongs to user

Upvotes: 0

Views: 61

Answers (3)

Kalyani
Kalyani

Reputation: 31

Using polymorphic associations has some limitations, so please do through it then decide to use a polymorphic association

http://codeblow.com/questions/pros-and-cons-for-ruby-on-rails-polymorphic-associations/

Upvotes: 0

Jyothu
Jyothu

Reputation: 3144

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

To establish HABTM relation you have to create a table named 'users_boards'

Upvotes: 2

Kalyani
Kalyani

Reputation: 31

As Board and User are having many to many relationship, there will be a new table for it, if you want HABTM you can use it.

User(id, name, other_attributes...)

Board(id, name,...)

List(id, name, user_id(fk),...)

Card(id, name, user_id(fk), list_id(fk), board_id(fk),...)

Comment(id, comment_msg, user_id(fk), card_id(fk),...)

Board_User(board_id(fk), user_if(fk)) --- M-M relation

Few attributes might change if there is a has_many through relation.

FK-- Foreign key, you can use has_many through depending on your requirements.

Upvotes: 0

Related Questions