Сравнение объекта или просто идентификаторы - PullRequest
8 голосов
/ 04 марта 2012

Есть ли увеличение производительности при сравнении таких объектов ...

current_user.id == @user.id

против этого ...

current_user == @user

Кроме того, существуют ли передовые практики для того, чтобы делать одно над другим независимо от производительности?

1 Ответ

11 голосов
/ 04 марта 2012

Да, но едва . ActiveRecord::Base#== делает это:

def ==(comparison_object)
  super ||
    comparison_object.instance_of?(self.class) &&
    id.present? &&
    comparison_object.id == id
end

Что существенно сравнивает id с, но гарантирует, что объекты относятся к тому же типу, который вы, вероятно, хотите, поскольку, например, если вы сравниваете только id с, они могут быть одинаковыми даже хотя один User, а другой Product.

Итак, лучше всего сравнивать сами объекты модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...