Rails: почему этот запрос на соединение не выполняется? - PullRequest
0 голосов
/ 25 января 2019

Сегодня я ношу худую, поэтому может быть, я спрашиваю что-то совершенно очевидное.

У меня есть две модели: Issue и Language. У проблемы есть язык, а у языка много проблем.

    class Language < ApplicationRecord
      has_many :issues
    end

    class Issue < ApplicationRecord
      belongs_to :language
    end

Issue имеет столбец идентификатора языка:

    > Issue.column_names
     => ["id", "created_at", "updated_at", "language_id"]

Language имеет следующее:

    > Language.column_names
     => ["id", "name", "created_at", "updated_at"]

Я могу успешно создать строку языка и строку вопроса, указывающую на этот язык.

    > lang = Language.create(name: 'hello')
    > Issue.create(language: lang)
    > 
    > Issue.first.language.name
    => "hello"

Я могу найти языковую строку по имени:

    > Language.find_by(name: 'hello')
    > => #<Language id: 1, name: "hello", created_at: "2019-01-25 16:06:39", updated_at: "2019-01-25 16:06:39">

Но если я попытаюсь использовать следующее соединение, я застряну:

     > Issue.joins(:language).where(language: { name: 'hello' })
     ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column: language.name: SELECT  "issues".* FROM "issues" INNER JOIN "languages" ON "languages"."id" = "issues"."language_id" WHERE "language"."name" = ? ORDER BY "issues"."created_at" DESC LIMIT ?)

Разбирая SQL, я предполагаю, что мой запрос ищет идентификатор языка, имя которого соответствует 'hello'. Но дальше я застрял.

Почему не выполняется запрос join? Я правильно написал. Проблема с самим запросом или похоже, что он вызван в другом месте?

1 Ответ

0 голосов
/ 25 января 2019

Вам нужно использовать форму множественного числа, где условие:

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