Campos booleanos en Rails

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?

preguntado el 22 de mayo de 12 a las 17:05

1 Respuestas

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

¡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

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.