Установите значение по умолчанию условно - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь выяснить, как установить значение по умолчанию для поля на основе некоторых условий.

Прямо сейчас поле room_type по умолчанию установлено на double, независимо от количества людей в комнате.

В основном я стремлюсь к чему-то вроде:

def set_room_defaults
  if people_in_room.size == 1
    set room_type = "Single"
  elsif people_in_room.size == 2
    set room_type = "Double"
  elsif people_in_room.size == 3
    set room_type = "Triple"
  end
end

Я искал драгоценный камень default_value_for, надеясь, что смогу сделать что-то вроде:

default_value_for :room_type, (call set_room_default)

Я немного прочитал, что after_initialize может быть близко к тому, что я ищу?

Возможно ли что-то подобное? Или я все об этом говорю не так?

Спасибо

1 Ответ

0 голосов
/ 03 июля 2018

Из документов API

обратный вызов after_find и after_initialize запускается для каждого объекта, который был найден и создан средством поиска, а также after_initialize вызван после создания новых объектов.

Вы могли бы сделать что-то вроде:

class Room < ApplicationRecord
  after_initialize :set_room_defaults

  def set_room_defaults
    if people_in_room.size == 1
        set room_type = "Single"
    elsif people_in_room.size == 2
        set room_type = "Double"
    elsif people_in_room.size == 3
        set room_type = "Triple"
    end
  end
end

Или вы можете хранить сопоставления в Array:

class Room < ApplicationRecord
  ROOM_TYPES = %w(Single Double Triple).freeze

  after_initialize :set_room_defaults

  def set_room_defaults
    set room_type = ROOM_TYPES[people_in_room.size - 1]
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...