【问题标题】:Rails 4: join queries with parent entity table, error: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "states"Rails 4:使用父实体表连接查询,错误:PG::UndefinedTable:错误:缺少表“状态”的 FROM 子句条目
【发布时间】:2016-08-09 15:14:22
【问题描述】:

我在基于 Rails 4 的网络应用程序中构建了两个实体:

class University
  belongs_to :state
end

class State
  has_many :universities
end

我正在尝试创建一个查询方法,该方法返回给定州数组的大学数组。

例如:

对于州代码:WA(华盛顿)、OR(俄勒冈)、CO(科罗拉多):[WA, OR, CO],他们应该返回以下大学:

University of Washington
University of Oregon
University of Colorado
....

我写了这个范围方法,但是它不起作用(见下面的错误):

universities.by_value_array(params[:state_codes])  # scope method by_value_array is defined in the University model

scope :by_value_array, -> (state_codes) {
  conditions = []
  q = ""
  state_codes.each_with_index { |code, i|
      if i == 0
        q = "universities.state_id = state.id and states.code = ?"
      else
        q += " OR universities.state_id = state.id and states.code = ?"
      end
      conditions.push(code.to_s)
    }
    conditions.insert(0, q)  # prepend

    joins(:state).where(conditions)
}

错误信息:

PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "state"
LINE 1: ...l_id" = $1 AND (universities.state_id = state...
                                                   ^
: SELECT COUNT(*) FROM "universities" INNER JOIN "states" ON "states"."id" = "universities"."state" WHERE "universities". (universities.state_id = state.id and state.code = 'WA' OR universities.state_id = state.id and state.code = 'CO')

http 状态为 422 - 此错误引发了无法处理的实体。

我不确定在这种情况下如何使连接查询工作,或者这是否可能?感谢您的任何意见!

【问题讨论】:

    标签: ruby-on-rails database inner-join


    【解决方案1】:

    表名应该是states 而不是state

    if i == 0
      q = "universities.state_id = state.id and states.code = ?"
    else
      q += " OR universities.state_id = state.id and states.code = ?"
    end
    

    更改表名

    if i == 0
      q = "universities.state_id = states.id and states.code = ?"
    else
      q += " OR universities.state_id = states.id and states.code = ?"
    end
    

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 2019-02-17
      • 2016-03-24
      • 2018-06-30
      • 2015-10-30
      • 2015-12-19
      • 2014-09-25
      • 2015-02-01
      相关资源
      最近更新 更多