2014-01-14 29 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(现在)作为我的数据库和rails 4.0。

Active Record Query where value in array field

谢谢!

UPDATE:一些进展

我想出如何创建的所有对象的数组,我想用“选择”方法。但我仍然需要将结果作为活动记录对象返回,所以我创建了一个类方法范围。

@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

错字...应该阅读Well.all。在OP中进行了更正。 –