查询数组内值的活动记录

Posted

技术标签:

【中文标题】查询数组内值的活动记录【英文标题】:Active record where query for value inside of an array 【发布时间】:2014-02-01 22:48:50 【问题描述】:

问题:是否可以构建一个类方法范围,可以根据表中数组内的值查询对象?如果是,我该怎么做?

在我的示例中,我有一个“wells”表,其中包含一个名为“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

谢谢!

更新:一些进展

我想出了如何使用“选择”方法创建一个包含我想要的所有对象的数组。但我仍然需要将结果作为 Active Record 对象返回,因此我创建了一个类方法范围。

@well = Well.select
         |well| if well.well_tags.present?
        then well.well_tags.include? ‘ceramic' end 

@well.class #=> array

【问题讨论】:

【参考方案1】:

不确定Show 来自哪里。

你可以尝试用Well.all 代替Show.all 吗?

【讨论】:

以上是关于查询数组内值的活动记录的主要内容,如果未能解决你的问题,请参考以下文章

Mysql查询以查找一段时间内值的百分比变化

Rails活动记录查询检索IDS数组中包含ALL IDS的所有记录

如何使用代码点火器活动记录查询返回一维数组中的表字段

如何查询活动记录?

Codeigniter 活动记录查询

如何加快rails3.2中的活动记录?我的活动记录查询时间超过 3 分钟