Написание логики, отличной от валидации внутри метода validator - rails 5 - PullRequest
0 голосов
/ 05 марта 2019

У меня есть сценарий, в котором мне нужно сохранить имя связанной записи в текущем объекте.

Учтите, что у меня есть столбец JSON, и у меня есть идентификатор другой таблицы внутри этого столбца JSON.

Например, запрос:

users: {
  name: 'test', 
  additional_details: { another_table_id: 1}
}

Что мне нужно сделать, это проверить, есть ли у другой таблицы этот id (запрос).

Итак, ядобавил пользовательскую ассоциацию в пользовательскую модель,

 validates :validate_additional_table


 def validate_additional_table
    a_t = AnotherTable.where(id: additional_details['another_table_id']).first

    if a_t.present?
      additional_details.merge!(another_table_record_name: a_t.name) # Is it a good practice?
    else
      errors.add(:base, 'record is invalid')
    end

 end

Я добавил некоторую другую логику (проверьте комментарий в приведенном выше валидаторе).Является ли это наилучшей практикой, если в валидаторе помимо логики проверки есть что-то еще?

1 Ответ

0 голосов
/ 06 марта 2019

Я не знаю, как делать логику внутри проверок, но использую

 AnotherTable.exists?(id: additional_details['another_table_id'])

вместо

a_t = AnotherTable.where(id: additional_details['another_table_id']).first

if a_t.present?
  additional_details.merge!(another_table_record_name: a_t.name) # Is it a good practice?

Это просто получило бы количество записей, присутствующих в БД, вместо загрузки всех данных в память. И добавьте имя Другой таблицы после обратного вызова save

...