2015-07-09 4 views
5

Sto usando Rails 4.2.3 e 2.2.1 rubinofind_by all'interno di un campo di applicazione è sparare 2 interroga

ho scritto un ambito in ruoli modello come segue:

app/modelli/role.rb

scope :default, -> { find_by(default: true) } 

Ora quando faccio funzionare

> Role.default 

#this is the output I got. 

Role Load (0.1ms) SELECT `roles`.* FROM `roles` WHERE `roles`.`default` = 1 LIMIT 1 
Role Load (0.1ms) SELECT `roles`.* FROM `roles` 
=> [] 

Come si può vedere questo spara 2 query e restituisce risultato sbagliato.

ho provato con metodo di classe al posto del campo di applicazione

def self.default 
    self.find_by(default: true) 
end 

Ora, quando corro

Role.default 

#this is the output I got 

Role Load (0.2ms) SELECT `roles`.* FROM `roles` WHERE `roles`.`default` = 1 LIMIT 1 
=> nil 

Con metodo di classe find_by funziona correttamente.

Non riesco a capire cosa sto sbagliando qui. Qualsiasi aiuto sarebbe apprezzato. Grazie in anticipo.

risposta

7

Non si dovrebbe utilizzare find_by all'interno di un ambito - find_by esegue effettivamente una query di database.

Utilizzare solo metodi che restituiscono ulteriori ambiti, ad esempio where, limit, order e così via.

Problemi correlati