Campos booleanos en Rails
Frecuentes
Visto 342 veces
0
En mi aplicación Rails, necesito almacenar campos booleanos en un modelo. Ahora, esto causa un problema ya que Sqlite3 (que uso para el desarrollo) usa las constantes de caracteres 't'
y 'f'
por valores de verdad. Sin embargo, MySQL, en el que se implementará mi aplicación, usa los literales true
y false
(correspondientes a tinyints 1 y 0 respectivamente). Esto hace que el uso de condiciones SQL sea problemático, ya que una expresión del tipo
select * from articles where published = true
expresado en Rails como
Article.where 'published = true'
fallará en Sqlite3 con el mensaje no such column: true
.
¿Cuál es la forma preferida de manejar el adaptador booleano de forma portátil en Rails?
1 Respuestas
1
Usando el registro activo, harías
Article.where(:published => true)
Probablemente querrá llevar esto un paso más allá y convertirlo en un ámbito
class Article < ActiveRecord::Base
scope :published, where(:published => true)
end
Para que en tu controlador puedas simplemente ir
@published_articles = Article.published
Más información sobre la interfaz de consulta de active_record aquí: http://guides.rubyonrails.org/active_record_querying.html
También está utilizando una operación de asignación. =
en lugar de comparación de igualdad ==
contestado el 22 de mayo de 12 a las 17:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails database or haz tu propia pregunta.
¡Gracias! No estaba al tanto de la instalación de alcance. Reasignación: ese fragmento de código no es Ruby sino SQL, que usa = para las pruebas de igualdad. - jforberg