Вопрос: Можно ли создать область методов класса, которая может запрашивать объекты на основе значений внутри массива в таблице? Если да, как я могу это сделать?Активная запись, где запрос значения внутри массива
В моем примере у меня есть таблица «колодцев», которая имеет поле массива, называемое «well_tags». Я хочу построить запрос, который возвращает все объекты, которые имеют указанное значение (например, «керамика») в массиве wells_tags. Основной вопрос будет что-то вроде этого:
@well = Well.all
@query = @well.where(“well_tags contains ceramic”)
И тогда сферы метод класса будет выглядеть примерно так, с «well_tag_search» пары передаются из контроллера:
class Well < ActiveRecord::Base
def self.well_tag_filter(well_tag_search)
if well_tag_search.present?
where(“well_tags contains ceramic")
else
Well.all
end
end
Я нашел другую сообщение, которое задает аналогичный вопрос (см. ссылку ниже), но я не могу получить ответ на работу для меня ... результат всегда «нуль», когда я знаю, что должно быть как минимум 1 объект. Я начинаю использовать sqlite (пока) как мою базу данных и рельсы 4.0.
Active Record Query where value in array field
Спасибо!
UPDATE: некоторый прогресс
Я понял, как создать массив всех объектов, я хочу, используя метод «выбрать». Но мне все равно нужно возвращать результаты как объект Active Record, поэтому я создаю область метода класса.
@well = Well.select
{ |well| if well.well_tags.present?
then well.well_tags.include? ‘ceramic' end }
@well.class #=> array
Typo ... должен читать Well.all. Исправлено в OP. –