2012-03-04 8 views
8

C'è un guadagno di prestazioni negli oggetti di confronto come questo ...Confrontando oggetto o solo gli ID

current_user.id == @user.id 

contro questa ...

current_user == @user 

ci sono anche ragioni di best practice per fare un sull'altro indipendentemente dalle prestazioni?

risposta

11

Sì, ma appena. ActiveRecord::Base#== fa questo:

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

che confronta essenzialmente id s, ma assicura che gli oggetti sono dello stesso tipo, che probabilmente si vuole dal momento che, per esempio, se confrontato solo id s che potrebbero essere lo stesso anche anche se uno è un User e un altro uno Product.

In conclusione, il confronto degli oggetti del modello è il migliore.