0

例如,我想组合两个数组并添加 where 子句,如下所示:

(Recipe.current + Recipe.previous).where(:name => "ABC")

我知道您可以将它组合成一个(Recipe.where("current is true or previous is true")),但我有一些复杂的查询迫使我以上述方式组合数组。

可能吗?

4

3 回答 3

3

答案取决于您要运行多少数据库查询来获取信息。

如果可以进行 2 个数据库查询,则可以执行以下操作:

rel     = Recipe.where(:name => "ABC")
recipes = rel.current | rel.previous

如果您想在 1 个数据库查询中包含所有内容,则必须OR在关系中使用子句,除非您想超越常规的 ActiveRecord 方法并使用 Arel 或查询生成宝石之一。

于 2012-09-11T20:01:35.107 回答
1

Your model's .current and .previous seems like a scope returning a ActiveRecord::Relation object. For these objects the method .where is available, but when you combine these objects its returning an Array. Arrays does not have the .where. So you have to pass that query before th combination or clean the queries mess. If you choose the second i'd highly recommend the Squeel gem.

于 2012-09-11T20:33:36.943 回答
1

我猜你想在 Rails 中创建一个复杂的单个 SQL 查询来归档你的目标?如果您可以在普通的 SQL 查询中做到这一点,那么在 Rails 中通常是可能的。

构建自定义 SQL 查询字符串可能是另一种解决方案。

另一种方法是组合这些数组并使用 Ruby 的“拒绝!” 要删除与您的模式不匹配的元素,可能会出现一些性能问题。

于 2012-09-11T19:45:16.913 回答