2012-05-22 4 views
0

В моем приложении Rails мне нужно сохранить логические поля в модели. Теперь это вызывает проблему, поскольку Sqlite3 (который я использую для разработки) использует символьные константы 't' и 'f' для значений истинности. Однако MySQL, к которому мое приложение будет развернуто, использует литералы true и false (соответствующие tinyints 1 и 0 соответственно). Это делает использование условий SQL проблематичных, так как выражение типаЛогические поля в Rails

select * from articles where published = true 

, выраженный в Rails, как

Article.where 'published = true' 

потерпит неудачу в sqlite3 с сообщением no such column: true.

Каков предпочтительный способ обработки булевых адаптеров в Rails?

ответ

1

Использование активной записи, вы могли бы сделать

Article.where(:published => true) 

Вы, вероятно, хотите, чтобы принять это шаг вперед, и сделать это сфера

class Article < ActiveRecord::Base 
    scope :published, where(:published => true) 
end 

Так что в вашем контроллере вы можете просто пойти

@published_articles = Article.published 

Дополнительную информацию о интерфейсе пользователя active_record можно найти здесь: http://guides.rubyonrails.org/active_record_querying.html

Вы также с помощью операции присваивания = вместо сравнения равенства ==

+0

Спасибо! Я не знал об этом объекте. Повторное назначение: этот фрагмент кода не Ruby, а SQL, который использует = для тестов равенства. – jforberg

Смежные вопросы