В моей базе данных я создаю три таблицы, которые являются 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
class UserGroup < ApplicationRecord
self.table_name = "user_group"
self.primary_key = "user_group_id"
has_many :user
belongs_to :user_group_info
end
class UserGroupInfo < ApplicationRecord
self.table_name = "user_group_info"
has_many :user_group
end
Вы можете использовать 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 })