Модель Ruby on Rails с табличным соединением

0

В моей базе данных я создаю три таблицы, которые являются user, user_group, user_group_info.
Я хочу сделать что-то вроде этого запроса, но я понятия не имею, как я могу присоединиться к двум таблицам.

SELECT * FROM user AS u
INNER JOIN user_group AS ug ON u.user_group_id=ug.user_group_id
INNER JOIN user_group_info AS ugi ON ug.user_group_id=ugi.user_group_id
WHERE ugi.language_id = 1



Модель пользователя

class User < ApplicationRecord
    self.table_name = "user"
    self.primary_key = "user_id"
    belongs_to :user_group
end


Модель UserGroup
class UserGroup < ApplicationRecord
    self.table_name = "user_group"
    self.primary_key = "user_group_id"
    has_many :user
    belongs_to :user_group_info
end


Модель UserGroupInfo
class UserGroupInfo < ApplicationRecord
    self.table_name = "user_group_info"
    has_many :user_group
end
  • 0
    Почему вы делаете свое имя таблицы в единственном числе?
  • 0
    user_group_info = Он обрабатывает информацию user_group на другом языке.

1 ответ

0
Лучший ответ

Вы можете использовать ActiveRecord для создания своего запроса, а не для его создания вручную. Попробуй это:

User.joins(user_group: :user_group_info).where(user_group_infos: { language_id: 1 })

Это должно привести к тому, что вы дали в качестве примера в своем вопросе.

Вы начинаете с User и присоединяетесь к user_groups. Через user_groups вы присоединяетесь к user_group_infos. Наконец, вы добавляете условие на user_group_infos. Есть несколько способов написать это.

where("user_group_infos.language_id = ?", language_id)
# or
where(user_group_infos: { language_id: language_id })
  • 0
    Это мне очень помогает, я знаю, в чем проблема сейчас, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню