Есть ли у Rails способ конвертировать флажки из «вкл» в true? - PullRequest
3 голосов
/ 01 июля 2011

Когда контроллер получает параметры отмеченного флажка, он возвращается как «вкл», если флажок был установлен. Теперь в моем случае я пытаюсь сохранить это значение как логическое значение, как правило, то, что вы хотите с значениями из флажков. У меня вопрос, есть ли у rails способ автоматически конвертировать "on" (или даже существует) в true / false или мне нужно сделать следующее?

value = params[my_checkbox] && params[my_checkbox] == "on" ? true : false

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

Вы можете просто использовать:

value = !params[:my_checkbox].nil?

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

0 голосов
/ 28 апреля 2015

Лучший способ сделать это - создать пользовательский установщик для поля в базе данных, что-то вроде этого:

class Person < ActiveRecord::Base
  def active=(value)
    value = value == 'on' ? true : false   
    super(value)
  end
end

Таким образом, вам не нужно беспокоиться об этом в контроллере иэто модель, которая знает, какой ценностью она должна быть.При переходе к просмотру рельсов автоматически устанавливается флажок из логического поля.На всякий случай, если это не сработало, вы также можете определить свой собственный получатель.

Это может быть использовано, например, в сочетании со средством доступа к магазину примерно так:

class Person < ActiveRecord::Base
  validates :active, inclusion: {in: [true, false]}
  validates :remember_password, inclusion: {in: [true, false]}

  store :settings,
        accessors: [:active, :remember_password],
        coder: JSON

  def active=(value)
    value = value == 'on' ? true : false   
    super(value)
  end

  def remember_password=(value)
    value = value == 'on' ? true : false   
    super(value)
  end
end

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

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