比较对象或只是ID

cas*_*yin 8 ruby ruby-on-rails

比较这样的对象是否有性能提升......

current_user.id == @user.id
Run Code Online (Sandbox Code Playgroud)

与此相比......

current_user == @user
Run Code Online (Sandbox Code Playgroud)

无论性能如何,还有最佳实践理由做一个而不是另一个吗?

And*_*all 11

是的,但几乎没有.ActiveRecord::Base#==做这个:

def ==(comparison_object)
  super ||
    comparison_object.instance_of?(self.class) &&
    id.present? &&
    comparison_object.id == id
end
Run Code Online (Sandbox Code Playgroud)

这本质上是比较ids,但确保对象属于同一类型,这可能是你想要的,例如,如果你只比较id它们,即使一个是另一个,它们也可能是相同UserProduct.

总之,比较模型对象本身是最好的.