在`where`之后我需要`all`吗?这是多余的吗?

时间:2015-03-19 22:08:37

标签: ruby-on-rails-4

这可能是一个愚蠢的问题。它肯定是迂腐的。

MyModel.where(...)MyModel.where(...).all之间有什么区别吗?

这个问题是由我几分钟前发布的弃用警告提示的:

DEPRECATION WARNING: This dynamic method is deprecated.
Please use e.g. Post.where(...).all instead.

all真的有必要吗?

1 个答案:

答案 0 :(得分:2)

不,它们是等价的,至少在你可能想到的方式中是这样的:

Model.where(id: nil) ===    Model.where(id: nil).all # returns true
Model.where(id: nil) ==     Model.where(id: nil).all # returns true
Model.where(id: nil).eql?   Model.where(id: nil).all # returns false
Model.where(id: nil).equal? Model.where(id: nil).all # returns false

这些平等告诉我们(从this exceptional answer大量借款):

  1. 案例平等 - 有时被认为是“如果我有一个标有a的方框,b是否会被放入其中?
  2. 通常思维中的“平等”。这两件事是“相同的”,我可以在没有任何影响的情况下替换另一件事,他们是否使用相同的输入返回相同的东西
  3. .eql?.equal?为false,确认这些是两个不同的对象。它们的哈希值不相同且对象标识不相同