2014-01-14 3 views
3

Вопрос: Можно ли создать область методов класса, которая может запрашивать объекты на основе значений внутри массива в таблице? Если да, как я могу это сделать?Активная запись, где запрос значения внутри массива

В моем примере у меня есть таблица «колодцев», которая имеет поле массива, называемое «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 

ответ

0

Не знаете, где Show исходит.

Можете ли вы попробовать сделать Well.all вместо Show.all?

+0

Typo ... должен читать Well.all. Исправлено в OP. –

Смежные вопросы