я следующие модели определены:Использование Rails STI модель с условиями соединения
class Group < ActiveRecord::Base
end
class Person < ActiveRecord::Base
end
class Policeman < Person
end
class Firefighter < Person
end
Внутри Group
, я хотел бы получить все группы, которые имеют Policemen
, например:
class Group < ActiveRecord::Base
has_many :policemen
scope :with_policemen, -> { joins(:policemen).uniq }
end
это работает как и ожидалось. Теперь, если я хочу, чтобы захватить все группы, которые имеют Policeman
, который имеет status: 3
, я хотел бы сделать:
class Group < ActiveRecord::Base
has_many :policemen
scope :with_policemen, -> { joins(:policemen).where(policemen: { status: 3 }).uniq }
end
Но, к сожалению, это не работает, так как ActiveRecord строит запрос, используя policemen
таблицу, которая, очевидно, не существует , Решением было бы использовать where(people: { status: 3 })
внутри области действия, но мне было интересно, почему ActiveRecord не может помещать правильную таблицу в предложение WHERE, так как она имеет необходимые ассоциации.
Да, это то, где вам просто нужно использовать правильное имя таблицы. Вероятно, это «люди», поэтому «где (люди: {статус: 3})». В журналах вы можете увидеть, что генерирует sql, а затем просмотреть SQL-ошибку, если вам нужно ее настроить. – Swards
Действительно, я намеревался написать «народ». Итак, нет ли способа ActiveRecord для правильного определения правильной таблицы из данной ассоциации? – linkyndy
Я думаю, что единственный вариант - использовать имя таблицы здесь. – Swards