2015-06-02 2 views
0

У меня есть это основное подтверждение в моей модели:Rails 4 модели форматирования и хэши (на самом деле основные)

validates :student_number, :presence => true, 
        :length => { :maximum => 255 }, 
        :uniqueness => true 

Так что это все, что? Вот мое лучшее предположение, если бы вы любезно сказали мне, где я ошибаюсь, я был бы признателен.

validates - это способ. Я посылаю ему символ :first_name, затем :presence => true, который является ... хешем с :presence для ключа и true в качестве значения?

За исключением того, что на самом деле это не похоже на хэш, по крайней мере, не соответствует docs.

А затем :length => { :maximum => 255 } - это тот же тип сущности (hash?), Что и :presence => true, но он ожидает другого хеша в качестве аргумента?

Спасибо за любую помощь.

ответ

1

Ruby позволяет отбрасывать круглые скобки и скобки, если они сами могут определить свои местоположения; в вашем случае, вы можете переписать код как:

validates(:student_number, { :presence => true, 
          :length => { :maximum => 255 }, 
          :uniqueness => true }) 

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

Примечание: Это объяснение немного упрощает, проверки на самом деле немного сложнее в том, как он обрабатывает свои аргументы. См. here для получения более подробной информации о том, как это работает.

+0

Yup. Это имеет большой смысл. Благодаря! – crowhill

+1

Чтобы уточнить, существует только один хэш, для всего двух аргументов. (@crowhill, казалось, неясно, были ли ': presence' и': length' частью тех же Hash или отдельных, я немного изменил форматирование этого ответа, чтобы сделать его более ясным.) –

0

близко, но не достаточно близко. Все :presence => true, :length => { :maximum => 255 }, :uniqueness => true - ОДИН хэш с тремя клавишами presence, length, uniqueness и тремя соответствующими значениями. На самом деле это то же самое, что и вы пишите { :presence => true, :length => { :maximum => 255 }, :uniqueness => true }, но в первую очередь короче

Смежные вопросы