Флажок Rails на MySql хранится как ноль или ноль - PullRequest
7 голосов
/ 24 сентября 2008

В моем приложении rails у меня есть список элементов (например, список задач), и для каждого элемента есть пара флажков для установки параметров.

Когда я отправляю форму, отмеченные поля сохраняются как нулевые, а не отмеченные как нулевые в БД.

вопрос: есть ли способ его настроить? Хранить данные в более традиционных 0 или 1, потому что я думаю, что сохранение нулевого значения как ложного и 0 как истинного немного сбивает с толку, особенно если другое приложение (например, приложение C) должно прочитать данные.

Ответы [ 4 ]

3 голосов
/ 24 сентября 2008

Предположим, что атрибут, с которым вы работаете, равен club_member, как в «ты член клуба?».

Обратите внимание, что в Ruby / Rails, как это работает сейчас, if model.club_member вернет false, если не проверено (значение равно нулю или в Ruby, nil) и true, если проверено (значение равно 0).

В целом, я бы настоятельно рекомендовал вместо того, чтобы позволять другим приложениям (например, приложениям C), непосредственно к вашим данным, вместо этого создавать API в Ruby / Rails, чтобы предоставлять данные из вашего приложения внешним объектам. Таким образом, вы будете лучше инкапсулировать внутренние компоненты вашего приложения, и вам не придется беспокоиться о таких вещах.


Однако, все, что говорится, вот ваш ответ:

Использование:

value="1"

... атрибута в ваших флажках HTML-теги и установите значение по умолчанию для логического атрибута (в вашей миграции) равным 0.

2 голосов
/ 24 сентября 2008

Существует несколько возможных причин для этого:

  • Убедитесь, что столбец в базе данных имеет тип "логический" в миграции
  • Поместить значение по умолчанию в логические значения
  • Используйте «check_box» в форме, а не «check_box_tag»
  • Некоторые версии Rails имели такое поведение на сгенерированных скаффолдах, я думаю, установка по умолчанию исправила это, но я не совсем помню.
1 голос
/ 08 апреля 2010

А как же:

value.to_i.zero?

>> a=nil
=> nil
>> a.to_i.zero?
=> true
>> a=0
=> 0
>> a.to_i.zero?
=> true
>> a=3
=> 3
>> a.to_i.zero?
=> false
0 голосов
/ 04 сентября 2010

Из документации на рельсы:

Объект является пустым, если он ложный, пустой или строка пробела. Например, «», ««, nil, [] и {} не заполнены.

Это упрощает: если! address.nil? &&! address.empty?

... в: если! address.blank?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...