alexfedoseev
@alexfedoseev
React & Rails Dev

Как проверять наличие значения параметра (validates_presence_of) при условии, что второй параметр имеет определённое значение?

Я во второй раз сталкиваюсь со следующим вопросом при написании валидации наличия.
У меня есть 2 модели:
  1. type — модель-справочник с типами данных
  2. data — модель с данными

Модель type:
  • id — ключ
  • name — название типа

Модель data:
  • id — ключ
  • type_id — id типа данных
  • main_value — обязательные данные
  • opt_value — опциональные данные (обязательные только для определенного типа)

Как правильно настроить валидацию наличия opt_value, при условии что я точно знаю, что определённый type.name существует и не меняется?
Я пробовал что-то вроде:
validates_presence_of :opt_value, :if => lambda { self.type_id == get_type_id }

def get_type_id
  Type.find_by(name: 'i_know_this_type_exists') # с и без .id
end

Но это не работает.
Я конечно вставляю типы данных в справочник при миграции и знаю какой id получает нужный мне тип, но хардкодить id в проверке ( :if => lambda { self.type_id == 2 } ) совсем пошло на мой взгляд.

Как правильно писать такие проверки?
  • Вопрос задан
  • 2744 просмотра
Решения вопроса 1
@alexesDev
Разве не так?
def get_type_id
  Type.find_by!(name: 'i_know_this_type_exists').id
  #                                              ^^^
end

Вы там объект с числом сравниваете. find_by! выкинет исключение, если по имени не найдёт ничего... тут подобный метод уместней использовать.

И лучше так сделать...
validates_presence_of :opt_value, if: :have_opt_value?

def have_opt_value?
    type_id == ::Type.find_by!(name: 'super').id
end
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы