Как работает валидация в ActiveRecord? - PullRequest
4 голосов
/ 19 января 2012

Чтобы установить проверку внутри модели в Rails, я должен написать что-то вроде:

class Post < ActiveRecord::Base
  validates :name,  :presence => true
  validates :title, :presence => true,
                    :length => { :minimum => 5 }
end

Я не могу понять, как это работает.Кажется, что он вызывает метод с именем validates и передает параметры, но этого не может быть, потому что, я считаю, я не могу вызвать метод непосредственно в теле класса.

Так что на самом деле происходит вздесь?

update

Из ответов кажется, что это вызов метода из унаследованного класса Base, но тогда почему это не работает?:

class Parent
  def foo
    puts "called foo"
  end
end

class Child < Parent
 foo
 foo
end

Ответы [ 2 ]

1 голос
/ 19 января 2012

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

Но это не так - код выполняется как классзагружен

Учтите это:

class Hi
  puts "yo"
end

Вы получите:

yo
 => nil

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

1 голос
/ 19 января 2012

Почему вы думаете, что не можете вызвать метод для тела класса? Это методы класса, и именно так они и называются - см., Например, бит о валидации здесь и определение валидаций в методе класса API здесь

Вы можете увидеть, как это работает здесь:

 class Foo
   def self.bar
     p 'hello'
   end
end

Foo.bar #=> hello

class Thing < Foo
  bar
end
 #=> hello
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...