Rails / ActiveRecord: установите для datetime значение null, если флажок не установлен - PullRequest
2 голосов
/ 08 февраля 2011

У меня есть сообщения с необязательной датой-временем expire_at.

Я пытаюсь сохранить это время-дату из моей формы , если установлен флажок "custom_expire_at".Если этот флажок не установлен, для даты и времени должно быть установлено значение NULL.

Я пытался уничтожить параметры expire_at, если значение флажка отсутствует:

# Delete expiration dates if box is not checked
if params[:item][:custom_expire_at]
  params[:item].delete(:custom_expire_at)
else
  params[:item].delete(:expire_at)
end

Однако expire_at имеет несколько-параметр:

"expire_at(1i)"=>"2011", "expire_at(2i)"=>"2", "expire_at(3i)"=>"10", "expire_at(4i)"=>"21", "expire_at(5i)"=>"32"

Попытка избежать полного уничтожения этого выбора даты и времени с помощью jQuery - очень бы выкинула его из параметров.

В итоге: 1) Как я могу вырезатьэти параметры, если я не хочу их?2) даже если мне удалось удалить expire_at, я не знаю, как установить значение обратно в NULL.Если я установлю для expire_at значение nil, моя модель будет игнорировать обновление.

  def ensure_expire_at_has_a_value
    self.expire_at ||= nil
  end

Есть идеи?Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

Чтобы обойти мультипараметр, вы можете использовать delete_if для удаления всех параметров expire_at:

params.delete_if{ |key, value| key.match(/^expire_at/) }
0 голосов
/ 08 февраля 2011

Я бы предложил вместо этого сделать это в вашей модели. Создайте attr_accessor для custom_expire_at. Убедитесь, что ваша форма подключена к нему. Затем создайте метод before_validation, который делает это:

self.expire_at = null, если custom_expire_at! = '1'

Кстати, вы проверяете против '1', потому что это то, что флажки отправляют обратно.

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