1

我非常熟悉在 ActiveRecord 查询中使用散列参数,例如:

SomeModel.where(association_id: something.id, status: ACTIVE_STATUSES).exists?

和类似的。但是如果你想做一个简单的 NOT EQUAL or !=or or <>type 条件呢?我的简单案例只是从查询中排除当前对象。

我能想到的唯一方法是:

SomeModel.where("id != ?", self.id).where(association_id: something.id,...)

但这似乎不太像rails。

有没有更简单的方法,或者!=在哈希条件中包含的方法?

4

3 回答 3

3

您可以放到 Arel 表中。Arel 上有一个很棒的(专业的)Railscast。 http://railscasts.com/episodes/355-hacking-with-arel

您也可以使用 Squeel gem。
http://erniemiller.org/projects/squeel/
http://railscasts.com/episodes/354-squeel

在斯奎尔:

SomeModel.where{ id != my_id }
于 2012-09-06T20:28:12.673 回答
2

Rails 4 有not

SomeModel.where.not(id: self.id)
于 2014-10-31T11:16:53.943 回答
1

你是对的,在查询中包含 != 的唯一方法是使用

SomeModel.where("id != ?", self.id)

除此之外,ActiveRecord 将其他结构转换为正确的 SQL 查询,例如:

where(:id => [1,2,3])

这将生成 "where id in (1,2,3)" ,但是对于 != , > , < 等这是唯一的解决方案(尽管我很高兴发现其他情况)

于 2012-09-06T19:36:24.853 回答