Соедините 2 таблицы с пользовательскими метаданными в Rails - PullRequest
0 голосов
/ 23 января 2011

У меня есть модель пользователя и модель цели.У модели цели есть имя и столбец типа, в котором на данный момент находятся следующие три записи:

name           | type
------------------------
Read Novels    | Reading
Read Newspaper | Reading
Write Reviews  | Writing

Теперь я хочу предоставить каждому пользователю интерфейс для ввода количества часов, на которые он потратилэто действие каждый месяц (hours_per_month) и количество разных дней, в которые они его выполняют (days_per_month).

В идеале я бы хотел работать с такими данными, как

current_user = User.find(params[:id])

current_user.goals.each do |goal|
  puts goal.name
  puts goal.type
  puts goal.hours_per_month
  puts goal.days_per_month
end

Как мне создать эту новую таблицу / модель, которая объединяет Цели для Пользователя и имеет доступ к статическим атрибутам Целей и заполненным пользователем значениям, как в примере кода выше?

Ответы [ 2 ]

1 голос
/ 23 января 2011

Вы можете создать модель Activity и дать ей определение таблицы, например:

Деятельность:

  • user_id
  • goal_id
  • hours_per_month
  • days_per_month

Затем добавьте к:

User
  has_many :activities
  has_many :goals, :through => :activity

Goal
  has_many :activities
  has_many :users, :through => :activity

Activity
  belongs_to :user
  belongs_to :goal

Вы можете использовать генератор, чтобы выполнять большую часть работы iirc.

1 голос
/ 23 января 2011

Таблица goal_users

column: user_id
column: goal_id
column: hours_worked

Модели:

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

has_and_belongs_to_many :goals

Цели:

has_and_belongs_to_many :users

def hours_per_month
  #calculate
end

def hours_per_day
  #calculate
end

Очевидно, установите дополнительные столбцы вне объединения, как вам нравится.

Дополнительный

В любой модели, использующей соединения AR, вам потребуется прямой доступ к промежуточной записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...