@andrew4habr

Какой способ валидации в моделях Ruby on Rails является предпочтительным?

Занялся изучением Ruby/Rials. Приятной внезапностью стало то, что тут очень большое внимание уделяют читабельности кода. Поэтому я немного недоумевал, почему в книге используют метод validates вместо validates_#{param}_of, так как второй более читабельный. И вот собственно вопрос, какой способ валидации предпочтительнее использовать?

class Product < ActiveRecord::Base
  # Способ один. Плюсы: все аргументы начинаются на одном уровне
  validates :title, :description, :image_url, :price, presence: true
  validates :title, uniqueness: true
  validates :price, numericality: {greater_than_or_equal_to: 0.01}

  # Способ второй. Читается, как предложение
  validates_presence_of :title, :description, :image_url, :price
  validates_uniqueness_of :title
  validates_numericality_of :price, greater_than_or_equal_to: 0.01
end
  • Вопрос задан
  • 440 просмотров
Решения вопроса 1
Jeiwan
@Jeiwan
Второй способ устаревший. Стайлгайды не одобряют (https://github.com/bbatsov/rails-style-guide#sexy-...), Хаунд ругается.
ИМХО, первый способ читать удобнее, так как все валидации, относящиеся к одному полю, лежат в одной строчке — удобнее искать, ведь если мы хотим проверить валидацию поля, то будем искать её по названию поля.

Предпочтительнее использовать тот, который используют в вашем проекте. Если пилите что-то для себя, и код кто-то увидит (потенциальный работодатель), то лучше придерживаться наиболее распространенных стайлгайдов (опять же https://github.com/bbatsov/rails-style-guide), так как это может показать вашу дисциплинированность и желание следовать лучшим практикам. Если пилите для себя, и код никто не будет смотреть, то пишите, как хотите.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Важна читаемость логики. А декларации, можно прочитать не напрягаясь. Тем более если все пишут одинаково, ориентируясь на документацию.

Если погуглить, наверняка было большое обсуждение этой смене синтаксиса, но стоит ли тратить на это время...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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