Ransack / Rails 6 : PG::UndefinedTable 通过 belongs_to 查询
Ransack / Rails 6 : PG::UndefinedTable for a query through a belongs_to
我无法链接 where 查询和 Ransack 查询,出现 PG::UndefinedTable
错误。我正在使用 Rails 6.1.3 和 Ransack 2.4.2.
我看到了这个问题:https://github.com/activerecord-hackery/ransack/issues/1119 每个人都同意升级到 rails 6.1 后问题已经解决。可悲的是,不是我的情况。
我的模型是这样的:
class Appointment < ApplicationRecord
belongs_to :slot
end
class Slot < ApplicationRecord
belongs_to :place
end
这个查询
Appointment.joins(slot: [:place])
.where('slot.date' => Date.today)
.ransack(slot_place_id_eq: 2)
.result
returns 这个错误:
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: invalid reference to FROM-clause entry for table "slots")
LINE 1: ...ointments"."slot_id" WHERE "slot"."date" = AND "slots"."p...
^
HINT: Perhaps you meant to reference the table alias "slot".
生成的查询如下,实际上,slots.place_id
不能用于 belongs_to。
SELECT appointments.*
FROM appointments
INNER JOIN slots slot ON slot.id = appointments.slot_id
INNER JOIN places ON places.id = slot.place_id
WHERE slot.date = '2021-06-30' AND slots.place_id = 2
有什么线索吗?
我刚刚解决了这个问题:这是一个不同的问题,错误消息与另一个问题相同。
这个:
.where('slot.date' => Date.today)
应该是这样的:
.where('slots.date' => Date.today)
2小时研究,10分钟写一道SO题,点击发布后30秒自己找到答案....
我无法链接 where 查询和 Ransack 查询,出现 PG::UndefinedTable
错误。我正在使用 Rails 6.1.3 和 Ransack 2.4.2.
我看到了这个问题:https://github.com/activerecord-hackery/ransack/issues/1119 每个人都同意升级到 rails 6.1 后问题已经解决。可悲的是,不是我的情况。
我的模型是这样的:
class Appointment < ApplicationRecord
belongs_to :slot
end
class Slot < ApplicationRecord
belongs_to :place
end
这个查询
Appointment.joins(slot: [:place])
.where('slot.date' => Date.today)
.ransack(slot_place_id_eq: 2)
.result
returns 这个错误:
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: invalid reference to FROM-clause entry for table "slots")
LINE 1: ...ointments"."slot_id" WHERE "slot"."date" = AND "slots"."p...
^
HINT: Perhaps you meant to reference the table alias "slot".
生成的查询如下,实际上,slots.place_id
不能用于 belongs_to。
SELECT appointments.*
FROM appointments
INNER JOIN slots slot ON slot.id = appointments.slot_id
INNER JOIN places ON places.id = slot.place_id
WHERE slot.date = '2021-06-30' AND slots.place_id = 2
有什么线索吗?
我刚刚解决了这个问题:这是一个不同的问题,错误消息与另一个问题相同。
这个:
.where('slot.date' => Date.today)
应该是这样的:
.where('slots.date' => Date.today)
2小时研究,10分钟写一道SO题,点击发布后30秒自己找到答案....