ruby-on-rails-4 - inner - rails query where
Rails 4 alcance predeterminado (8)
En mi aplicación Rails, tengo un alcance predeterminado que se ve así:
default_scope order: ''external_updated_at DESC''
Ahora me he actualizado a Rails 4 y, por supuesto, recibo la siguiente advertencia de obsolescencia "Calling #scope o #default_scope con un hash está en desuso. Utilice una lambda que contenga un alcance". He convertido con éxito mis otros ámbitos, pero no sé cuál debería ser la sintaxis para default_scope. Esto no funciona:
default_scope, -> { order: ''external_updated_at'' }
Debería ser solo:
class Ticket < ActiveRecord::Base
default_scope { order(:external_updated_at) }
end
default_scope acepta un bloque, lambda es necesario para scope (), porque hay 2 parámetros, nombre y bloque:
class Shirt < ActiveRecord::Base
scope :red, -> { where(color: ''red'') }
end
Esto es lo que funcionó para mí:
default_scope { order(:created_at => :desc) }
Esto funcionó de mí (solo para ilustración con un dónde) porque llegué a este tema por el mismo problema.
default_scope { where(form: "WorkExperience") }
Esto funciona para mí en Rails 4
default_scope { order(external_updated_at: :desc) }
Esto también funcionó para mí:
default_scope { order(''created_at DESC'') }
También puede usar la palabra clave lambda
. Esto es útil para bloques multilínea.
default_scope lambda {
order(external_updated_at: :desc)
}
que es equivalente a
default_scope -> { order(external_updated_at: :desc) }
y
default_scope { order(external_updated_at: :desc) }
default_scope -> { order(created_at: :desc) }
No olvides el símbolo ->
default_scope {
where(published: true)
}
Prueba esto.