Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 合并两个活动记录关联rails_Ruby On Rails_Activerecord_Filter_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 合并两个活动记录关联rails

Ruby on rails 合并两个活动记录关联rails,ruby-on-rails,activerecord,filter,ruby-on-rails-5,Ruby On Rails,Activerecord,Filter,Ruby On Rails 5,我们正在RubyonRails中实现过滤器,过滤器可以与和/或条件结合使用 实现或在过滤条件之间 Filter 1或Filter 1或Filter 3=我们使用rails或method()通过将两个活动记录关系与OR组合来实现这一点 例如:过滤条件为 id为1或id为2 为此, Person.where(id:1)或(Person.where(id:2) 生成的查询将是,从“people”中选择“people”。*其中(“people”。“id”=$1或“people”。“id”=$2)[[“i

我们正在RubyonRails中实现过滤器,过滤器可以与和/或条件结合使用

实现或在过滤条件之间

Filter 1或Filter 1或Filter 3=我们使用rails或method()通过将两个活动记录关系与OR组合来实现这一点

例如:过滤条件为

id为1或id为2

为此,

Person.where(id:1)或(Person.where(id:2)

生成的查询将是,
从“people”中选择“people”。*其中(“people”。“id”=$1或“people”。“id”=$2)[[“id”,1],“id”,2]]

实现过滤条件和过滤条件之间的差异

我们面临的主要问题是将过滤器与条件相结合

id为1,id为2

我们尝试使用该方法,但使用该方法时,相同的条件将被最近的条件覆盖。也发现了此问题

注意:我提供的示例看起来可能很简单,但是过滤器逻辑非常复杂,所以我们不能只是在那里链接rails范围

((id为1或id为2)和(id为10或id为20))

这是一个简单的过滤器的外观。可以添加更多的复杂性。我们的过滤器的外观如下

我们要做的是将所有内部块与OR组合,并将所有外部块与and组合。如果过滤条件为and,并且要在同一列中查询该列,有人能提出更好的方法吗

提前谢谢


我们还想得到where条件并进行字符串连接。但希望这是最坏的情况。

要实现过滤条件之间的
可以简单地使用.Arel表使comlex查询更简单、更容易


另一种方法,你仍然可以使用。我认为这是你在
ransack

中想要的,我们在JSON列中进行筛选,我们需要在那里进行转换和查询。因此我们不能使用ransack。我想我会混淆你的问题。你想像ransack演示应用程序一样进行筛选吗?如果你想像ransack一样进行筛选,请像ransack一样进行筛选ransack,2篇博文:,都是很好的参考资料,可以使过滤器像ransack一样,即使你在JSON列中进行过滤。你对ransack的真正问题是什么,你能说清楚吗?
Person.where(id:1).merge(Person.where(id:2))
# The first condition is overridden by second, if the same condition is on the same column.
Person Load (0.7ms)  SELECT "people".* FROM "people" WHERE "people"."id" = $1  [["id", 2]]