sql - remove - El alcance de Rails para IS NOT NULL y no está vacío/en blanco?
select bigger value sql (6)
Como señala Erwin, en este caso funcionará una simple text_value <> ''''
.
scope :comments, where("text_value <> ''''")
(Rails 3 prefiere esta sintaxis de consulta para el scope
, así como find
, all
, etc.) en lugar de un hash de opciones, por ejemplo :conditions => ...
Este último está obsoleto en Rails 3.1 .)
En Rails 4, el segundo argumento debería ser un lambda en su lugar:
scope :comments, ->{ where("text_value <> ''''") }
Tengo el siguiente alcance:
scope :comments, :conditions => [''text_value IS NOT NULL'']
Pero también quiero que las condiciones digan "O text_value NO ESTÁ VACÍO" (o algo parecido).
No quiero seleccionar ninguna fila en la que text_value
esté vacío / en blanco.
En Rails 4 puedes hacer
where.not(text_value: '''')
Personalmente lo estoy haciendo así:
1) Añadir a los inicializadores
class Arel::Attributes::Attribute
# Encode column name like: `posts`.`author_id`
def to_sql
"`#{relation.table_name}`.`#{name}`"
end
def is_not_empty
"#{to_sql} <> ''''"
end
end
2) Añadir a tu modelo.
scope :comments, -> { where(arel_table[:text_value].is_not_empty) }
¡Buena suerte!
Use text_value <> ''''
para cubrir eficientemente ambos casos.
Solo será TRUE
para un valor de text_value
que no sea NULL
ni empty
.
carriles 4
scope :comments, -> { where.not(:text_value => nil) }
scope :comments, where("text_value <> ''''")