【发布时间】:2014-03-08 12:39:22
【问题描述】:
我有一张名为cherry_picker_cherries 的表。这些记录多态地属于一个名为Pickable 的模型。他们可以在表中为同一个pickable 有多个条目,但它总是有不同的cherry_pick_id。
我的问题:我有一个名为Favorite Tree 的cherry pick 和一个名为Favorite Fruit 的单独cherry_pick。我希望能够通过多个樱桃挑选来过滤一组可挑选的东西。例如,我想查找所有最喜欢的树为cherry 和最喜欢的水果为orange 的所有可摘果。
我可以使用以下方法以糟糕的方式完成此操作:
CherryPicker::Cherry.find_by_sql("SELECT * from cherry_picker_cherries t1 JOIN cherry_picker_cherries t2 USING(pickable_id) WHERE t1.value = 'orange'AND t2.value = 'cherry'")
但是,这种方法有几个缺点。它不能处理更多的 Cherry Picks,现在只有两个。此外,结果集被转换为一个数组,但我需要返回一个 ActiveRecord 关系,以便我可以继续将方法链接到它上面。
我试图查看 AREL 是否有某种解决方案来生成与上述匹配的简单查询,但我陷入了死胡同。循环遍历参数的散列以允许您可以过滤的 2、3、4 或 X 个樱桃选择很容易。
这甚至可以在 AREL、rails 或其他任何东西中实现吗?
【问题讨论】:
-
让我知道下面的代码是否适合您,以便我可以将其编辑为更通用 =)
标签: mysql ruby-on-rails ruby arel