ruby-on-rails: update_attributes переопределяет проверки модели? - PullRequest
0 голосов
/ 19 марта 2010

У меня типичная, Почтовая модель:

class Post< ActiveRecord::Base
    validates_presence_of :user_id                                   #Line 1
    validates_presence_of :title,:body                               #Line 2

в контроллере у меня есть:

def create
   if request.post? 
       if login_required
           @post = Post.new(params[:post])                            #Line 3
           @post .update_attribute("user_id",session[:userid])        #Line 4

Однако, если проверки в строке 2 не пройдены, сообщение все равно будет создано, если строка 4 не будет закомментирована.

1) Почему?

2) Предложения по исправлению?

Спасибо

1 Ответ

6 голосов
/ 19 марта 2010

Из записи update_attribute в документ для ActiveRecord :: Persistence :

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

Кажется, что это лазейка, помогающая избежать ненужных проверок при выполнении быстрой настройки записи.Если вы хотите проверить, просто используйте

@post.update_attributes(:user_id => session[:userid])
...