代码之家  ›  专栏  ›  技术社区  ›  user3574603

Rails:为什么这个连接查询失败?

  •  0
  • user3574603  · 技术社区  · 6 年前

    我今天穿得很瘦,所以可能我在问一些非常明显的问题。

    我有两种型号: Issue Language . 一个问题有一种语言,一种语言有许多问题。

        class Language < ApplicationRecord
          has_many :issues
        end
    
        class Issue < ApplicationRecord
          belongs_to :language
        end
    

    问题 具有语言ID列:

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

    语言 具有以下内容:

        > 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,我假设我的查询正在查找语言名称匹配的语言ID。 'hello' . 但除此之外,我还被困住了。

    为什么是 join 查询失败?我写的对吗?查询本身是否有问题,或者看起来是由其他地方引起的?

    1 回复  |  直到 6 年前
        1
  •  2
  •   mrzasa    6 年前

    您需要在下列条件下使用复数形式:

    > Issue.joins(:language).where(languages: { name: 'hello' })