【问题标题】:Postgres error from active record joins来自活动记录连接的 Postgres 错误
【发布时间】:2013-08-28 17:45:42
【问题描述】:

Rails 3.2 炼油厂 2.0.10

我的引擎之间存在基本关联

Work
  belongs_to client

Client
  has_many works

在我的控制器中,我有一个方法应该给我一个来自指定客户端 (myClientName) 的作品列表,但是我收到一个 postgres 错误,说我缺少一个 from 子句:

target = "myClientName"
::Refinery::Works::Work.joins(:client).where(client: {title: target})

还有错误:

PG::Error: ERROR:  missing FROM-clause entry for table "client"

我认为我的问题不是查询,因为它的构造几乎与活动记录文档中的示例相同:

time_range = (Time.now.midnight - 1.day)..Time.now.midnight
Client.joins(:orders).where(orders: {created_at: time_range})

我认为这可能是命名空间问题,但 sql 语句似乎正在查看正确的表。我绝不是 sql 大师,但我看不出活动记录生成的 sql 有什么问题:

: SELECT "refinery_works".* FROM "refinery_works" INNER JOIN "refinery_clients" ON         "refinery_clients"."id" = "refinery_works"."client_id" WHERE "client"."title" = 'myClientName'

知道这里可能出了什么问题吗?

【问题讨论】:

    标签: sql ruby-on-rails-3 postgresql activerecord refinerycms


    【解决方案1】:

    仔细查看您的查询:

    SELECT "refinery_works".* 
    FROM "refinery_works" 
    

    这里的Inner JOIN指的是refinery_clients

    INNER JOIN "refinery_clients" ON "refinery_clients"."id" = "refinery_works"."client_id"
    

    在这里您尝试使用client 表属性

    WHERE "client"."title" = 'myClientName'
    

    所以本质上,查询是错误的。
    可能导致此问题发生的原因:

    客户端模型是否引用了另一个表? self.table_name = 'refinery_clients'?

    尝试更改此部分,.where(client: {title: target})
    对于这样的事情,.where('refinery_clients.title = ?', target)
    或者,如果你碰巧真的使用了一个名为 client 的表,.where('client.title = ?', target)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 2014-08-05
      • 2013-08-02
      相关资源
      最近更新 更多