Domanda

Esiste un modo per aggiungere una condizione di ricerca per tutti i modelli record attivo?

cioè vorrei questa query

ExampleModel.find :all, :conditions=> ["status = ?", "active"]

a comportarsi allo stesso modo di

ExampleModel.find :all

in ogni modello

Grazie !!

È stato utile?

Soluzione

Si potrebbe utilizzare default_scope :

class ExampleModel < ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end

Se si desidera utilizzare questo in tutti i modelli, è possibile ActiveRecord::Base sottoclasse e derivare da quello di tutti i vostri modelli (probabilmente non funziona bene con tavolo singolo eredità):

class MyModel < ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < MyModel
end

... o si può impostare il default_scope su ActiveRecord::Base stesso (potrebbe essere fastidioso se si decide che una modella non dovrebbe avere questo ambito predefinito):

class ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end

Come già detto da KLOCHNER in un commento, si può anche prendere in considerazione l'aggiunta di un named_scope a ActiveRecord::Base, chiamato active, ad esempio:

class ActiveRecord::Base
  named_scope :active, :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
ExampleModel.active  # Return all active items.

Altri suggerimenti

Aggiornamento: named_scope era href="http://apidock.com/rails/ActiveRecord/NamedScope/ClassMethods/named_scope" rel="nofollow"> deprecato / rinominato in Rails 3.1. Come del 3.2.8, il nuovo metodo è chiamato scope che utilizza il metodo where anziché :conditions

Vecchio:

named_scope :active, :conditions => ["status = ?", "active"]

scope :active, where(:status => "active")

o

scope :active, where("status = ?", "active")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top