我应该使用合并吗?

时间:2018-11-20 23:34:31

标签: ruby postgresql activerecord ruby-on-rails-5

更新2

Cama::PostType.first.posts.joins(:custom_field_values)
.where("cama_custom_fields_relationships.custom_field_slug = ? AND 
cama_custom_fields_relationships.value LIKE ?","localization", 
"%Paris%").merge(Cama::PostType.first.posts.joins(:custom_field_values)
.where("cama_custom_fields_relationships.custom_field_slug = ? AND cama_custom_fields_relationships.value = ?","type-localization", "2"))

为什么此合并无效?

分别执行时,它返回我相同的结果...合并应作为交集起作用,因此应成为公共部分。我不明白

更新

我将尝试以更具概念性的方式提问。

我有B型,其中有slug:text,value:text,belongs_to:A型

我的模型A的名称为:字符串,has_many:模型B

@posts_one =我搜索slug =“ something”,值=“ city”的模型B

@posts_two =我搜索B型,其中slug =“ mood”,value =“ good”

我有2个基于不同参数的结果。两者都属于:模型A

现在,我只想返回普通的belongs_to。 所以

@posts_one将返回20个带有model_a_ids的结果

@posts_two将返回20个带有model_a_ids的结果

我只想返回这2个查询的常见model_a_ids并立即查找帖子。我试图在一个查询中做到这一点,但不知道是否可能

原始帖子

我使用Camaleon CMS,并尝试基于其他“自定义字段”创建过滤器。我想回答这个问题,您不必知道此cms。

我想找到2个查询的共同部分,或者一次查询(最好)

我有

@posts = Cama::PostType.first.posts.includes(:custom_field_values)
@param_localization = "Paris"
@param_type_localization = "House"


@posts_one = @posts.merge(CamaleonCms::CustomFieldsRelationship.
where("cama_custom_fields_relationships.custom_field_slug = ? AND 
LOWER(cama_custom_fields_relationships.value) LIKE ?", "localization",
"%#{@param_localization}%"))

puts @posts_one.count => 2


@posts_two = @posts.merge(CamaleonCms::CustomFieldsRelationship.where(custom_field_slug:
"type-localization", value: @param_type_localization))

puts @posts_two.count => 2

问题是如何将其合并在一起或使其成为一个查询?当我在一个where clause中完成该操作时,它返回0个结果,因为我需要找到2个具有不同值和子项的不同自定义字段关系,但它与通过:custom_fields_values到发布的关系,因此我必须进行2个查询猜(像我一样)。首先,我用slug = localization找到customFieldRelationship,其次用slug = type_localization找到,然后我需要找到common part

我尝试@result = @posts_one.merge(@posts_two),但当时没有任何结果。我以为它将返回我“ 公共部分”的关联,这意味着 2个结果

如何结合使用它来查找满足两个查询要求的帖子?

让我知道我是否对我的问题解释得不够充分。

1 个答案:

答案 0 :(得分:0)

您需要将其与SQL结合:(未经测试)

@posts_combined = @posts.merge(CamaleonCms::CustomFieldsRelationship.
where("(cama_custom_fields_relationships.custom_field_slug = ? 
  OR cama_custom_fields_relationships.custom_field_slug = 'type-localization') 
  AND LOWER(cama_custom_fields_relationships.value) LIKE ? ", "localization", 
  "%#{@param_localization}%"))