Как сделать запрос через has_many - PullRequest
1 голос
/ 10 февраля 2020

В моем приложении Rails у меня есть 3 модели: пользователь, язык и геймификация. Они связаны через has_many через:

User
has_many :gamifications 
has_many :languages, -> { distinct }, through: :gamifications

Language
has_many :gamifications
has_many :users, -> { distinct }, through: :gamifications

Gamification
belongs_to :user
belongs_to :language

У языка есть столбец «имя», а у Gamification есть столбец «очки».

Я пытаюсь написать метод для модели User, который бы возвращал точки от геймификации первого пользователя, которая связана с языком, который я запрашиваю.

Что-то подобное работает:

def points(language)
  gamifications.where(language_id: language).first
end

, но я бы действительно хотел запросить language.name, а не language.id. Пока у меня есть

def points(language)
  gamifications.where(languages: { name: language }).first
end

, но он вызывает PG :: UndefinedTable: ОШИБКА: отсутствует запись предложения FROM для таблицы "language"

Можете ли вы помочь?

1 Ответ

1 голос
/ 10 февраля 2020

Если вы хотите объединить таблицы для вашего запроса, вам также нужно связать при вызове #joins:

def points(language)
  gamifications.joins(:language).where(languages: { name: language }).first
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...