Как выбрать элементы в БД в зависимости от логического атрибута - PullRequest
1 голос
/ 28 мая 2020

Я использую сервер Ruby On Rails 6.0.3.1 с базой данных SQLite3.

Одна из моих моделей называется Airport и имеет несколько столбцов, например listable, которое является логическим.

Я хочу позвонить Airport.listable, чтобы получить все аэропорты, которые должны отображаться в списке.

// app/models/airport.rb
class Airport < ActiveRecord::Base
    validates :icao, :latitude, :longitude, presence: true
    validates :icao, uniqueness: true

    has_many :departure_compagny_routes, class_name: 'CompagnyRoute', foreign_key: 'departure_id'
    has_many :arrival_compagny_routes, class_name: 'CompagnyRoute', foreign_key: 'arrival_id'

    scope :listable, -> { where(listable: true) }

    def to_param
        icao
    end

    def compagny_routes
        departure_compagny_routes + arrival_compagny_routes
    end
end

Когда я звоню Airport.listable, я получаю пустой список. У меня такая же проблема при вызове Airport.where(listable: true).

Недавно я обновил свое приложение с Rails 4.2 до Rails 6, и до тех пор код работал отлично.

У меня такая же проблема с другие модели: Model.where(boolean_attribute: bool) всегда пусто, но вызов Airport.where(iata: nil), где iata - строка, работает отлично.

Как я могу избавиться от этого и заставить работать мой прицел?

1 Ответ

3 голосов
/ 28 мая 2020

Вы пробовали:

scope :listable, -> { where(listable: 1) }

SQLite может запутаться, потому что у него нет реальных логических значений.

https://www.sqlite.org/datatype3.html

SQLite не имеет отдельного логического класса хранения. Вместо этого логические значения сохраняются как целые числа 0 (ложь) и 1 (истина).

...