Структура метода валидации Ruby on Rails - PullRequest
0 голосов
/ 14 декабря 2011

У меня довольно простой вопрос о синтаксисе ruby ​​(и пару других разъяснений), и я не могу понять это на всю жизнь.

В контексте у меня есть довольно распространенный подкласс класса ActiveRecord класса модели.:: База, и я использую проверяет.

Я считаю, что соглашению Ruby нравится держать вещи аккуратными, разбивая длинные куски кода на несколько строк, если эти строки доходят до 80 строк, если это не сложно сделать с регулярным выражением.Мой первый вопрос:

Как правильно разделить эту строку проверки, чтобы она работала правильно?

validates :email, :uniqueness => true, :length => {:within => 5..50}, :format => {:with => /^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i}

Я пробовал что-то вроде:

validates(
    :email,
    :uniqueness => true,
    :length => {:within => 5..50},
    :format => {:with => /^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i}
)

Я где-то читал в соглашении ruby, что вы можете разбивать строки, используя обратную косую черту, и я еще не пытался это сделать, потому что я думаю, что это будет выглядеть немного странно, особенно если вы можете использовать силу Руби, просто убедившись, что запятая или операнд находится вконец строки.

Мой последний вопрос:

Может ли кто-нибудь написать этот метод проверки с установленными правильными скобками и скобками?Может быть, я немного смущен тем, какой основной синтаксис идет куда.

Краткий обзор:

Как правильно разделить одну строку, как указано выше?Можете ли вы разделить строки кода ruby ​​с помощью обратной косой черты?Кто-то пишет тот же метод, написанный со всеми скобками и скобками.

Спасибо заранее.

1 Ответ

0 голосов
/ 14 декабря 2011

У вас правильная идея. Я бы написал макрос validates таким образом,

validates :email,
  :uniqueness => true,
  :length => {:within => 5..50},
  :format => {:with => /^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i}

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

Да, вы можете использовать обратную косую черту, но она, как правило, не нужна, и, мне кажется, мне некрасиво. Лучше закончить оператором, а затем продолжить следующую строку с отступом. см. http://ruby -doc.org / docs / ProgrammingRuby / html / language.html для примера viz-a-viz

Я бы старался держать литералы RegExp в одной строке, если это возможно. Если это слишком долго, вы можете начать использовать Regexp.new вместо

...