Два разных типа ассоциаций на одних и тех же двух столах в Rails - PullRequest
1 голос
/ 12 июня 2010

У меня есть две модели, пользователи и темы, которые я в настоящее время объединяю в ассоциацию HABTM в таблице themes_users.Как правило, после того, как пользователь создает новую тему, другие пользователи могут выбирать ее для собственного использования.

Однако редактировать ее может только первоначальный создатель темы.Итак, мне нужно иметь какой-то другой вид ассоциации для обработки этих отношений, что-то вроде поля create_by_id в теме.

Таким образом, пользовательская модель действует как две разные роли: они могут быть реализаторомтема И / ИЛИ владелец темы.Отношение реализатора обрабатывается таблицей соединений themes_users;вопрос: как правильно справиться с этой вторичной ассоциацией?Нужно ли сделать пользователей полиморфными, а затем сделать ссылку на creat_by_id «владельцем»?Или есть что-то проще?

Большое спасибо за помощь!

1 Ответ

1 голос
/ 12 июня 2010

Я полагаю, вы должны добавить следующую ассоциацию

class User < ApplicationController
   # a user can create many themes
   has_many :themes_created, :foreign_key => :creator_id, :class_name => "Theme"
end

class Theme < ApplicationController
   # add a creator_id column in your themes table
   belongs_to :creator, :class_name => "User"
end

Таким образом, вы можете получить все themes, созданные некоторыми @user через

@user.themes_created
...