Rails polymorphic where

Viewed 30

I have a polymorphic model

class BankFacility < ApplicationRecord
  belongs_to :facility_group
  belongs_to :facility, polymorphic: true

end

the bank facility could have many types of faciltiis like this

<ActiveRecord::Relation [#<BankFacility id: 2, facility_group_id: 2, facility_id: 8, facility_type: "Building", created_at: "2022-07-29 19:54:28", updated_at: "2022-07-29 19:54:28">, #<BankFacility id: 3, facility_group_id: 2, facility_id: 9, facility_type: "Building", created_at: "2022-07-29 19:54:47", updated_at: "2022-07-29 19:54:47">, #<BankFacility id: 4, facility_group_id: 3, facility_id: 1, facility_type: "Vehicle", created_at: "2022-07-30 18:21:49", updated_at: "2022-07-30 18:21:49">, #<BankFacility id: 5, facility_group_id: 4, facility_id: 1, facility_type: "EmployeeCommute", created_at: "2022-07-30 18:30:16", updated_at: "2022-07-30 18:30:16">, #<BankFacility id: 6, facility_group_id: 5, facility_id: 1, facility_type: "BusinessTravel", created_at: "2022-07-30 18:53:22", updated_at: "2022-07-30 18:53:22">, #<BankFacility id: 7, facility_group_id: 6, facility_id: 1, facility_type: "ElectricityGenerator", created_at: "2022-07-30 18:54:34", updated_at: "2022-07-30 18:54:34">]> 

all what i want is how to filter by facility attribute which is common attribute between all facilities like date

i need to do something like this

 BankFacility.where('facility.date >= 2022-07-27')

but i always get this error

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "facility")
LINE 1: ..."bank_facilities".* FROM "bank_facilities" WHERE (facility.d...

1 Answers

I think the best you could do here would be something like this:

facilities = BankFacility.distinct.pluck(:facility_type).map do |ft|
  ft.safe_constantize.joins(:bank_facilities).where(date: "2022-07-27"..)
end
BankFacility.distinct.where facility: facilities
Related