2013-12-16 3 views
0

У меня есть три таблицыРельсы has_many, belongs_to с помощью трех таблиц

  • Членство
  • User_Groupings
  • пользователей

Это, как я пытаюсь присоединиться к ним.

User.id == Memberships.user_id 
User.user_type == User_Groupings.user_type 
Memberships.group_id == User_Groupings.group_id 

Я хотел бы сделать это, используя ассоциации, если это возможно.

Я понятия не имею, как это сделать, или имеет много этого комплекса.

Моя конечная цель - позвонить пользователю user_grouping.users и получить всех пользователей, соответствующих указанным выше полям.

ответ

0
User.id == Memberships.user_id 

дает:

class Membership 
    belongs_to :user 
class User 
    has_many :memberships 

но остальные два не являются стандартными Рельсы ассоциаций.

User.user_type == User_Groupings.user_type 

Memberships.group_id == User_Groupings.group_id 

Вы могли бы потенциально смоделировать это пропускание условия для ассоциаций

, возможно, вы могли бы обновить имена этих буксира отражают более стандартные ассоциации (или, по крайней мере, дать нам лучшее представление о том, что вы хотите)

например

User.user_grouping_id == User_Groupings.id 
Memberships.user_grouping_id == User_Groupings.id 

тогда, если вы хотите "user_type" вы можете сделать его метод, например:

class User 
    def user_type 
    self.user_grouping.user_type 
    end 
+0

Моя конечная цель - позвонить пользователю user_grouping.users и получить всех пользователей, соответствующих указанным выше полям. Я могу изменить таблицу user_groupings, но другие не будут легко меняться. – Brandon

+0

Вы можете уточнить, что вы подразумеваете под «всеми пользователями, которые соответствуют вышеуказанным полям»? возможно, использовать прецедент/сценарий? –

0

Возможно, я не совсем понимаю, что вы делаете, и поэтому не хватает точки.

Кажется, вы пытаетесь сделать слишком много с user_groupings тем, что у него есть поле идентификатора fir user_type и group_id. Поэтому моя первая реакция будет заключаться в том, что вы должны иметь user_type и group_id либо в двух разных таблицах, либо иметь их как одно и то же поле (второй вариант кажется маловероятным)

У вас нет стандартных внешних ключей, используя belongs_to: пользователь,: foreign_key =>: xxxxx_id

жаль, что это не имеет прямого ответа на ваш вопрос, но я думаю, что вы должны еще раз взглянуть на структуру базы данных

0

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

class User 
    belongs_to :user_grouping 
    has_many :user_memberships, :dependent => :destroy 
    has_many :memberships, :through => :user_memberships 
end 

И ..

class UserGrouping 
has_many :users, :dependent => :nullify 
end 

И ..

class Membership 
has_many :user_memberships, :dependent => :destroy 
has_many :users, :through => :user_memberships  
end 

И ..

class UserMembership 
    belongs_to :user 
    belongs_to :membership 
end 

Конечно, вы должны ставит соответствующие внешние ключи в таблицах.

Надеюсь, это поможет вам.

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