2010-03-19 6 views
0

J'ai un typique modèle Post:ruby-on-rails: update_attributes remplace les validations de modèle?

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

dans le contrôleur, j'ai:

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

Cependant, si les validations sur la ligne 2 ne la Poste sera encore créé, à moins que la ligne 4 est commenté.

1) Pourquoi?

2) Suggestions sur un correctif?

Merci

Répondre

6

Dès l'entrée sur update_attribute dans the doc for ActiveRecord::Persistence:

Met à jour un seul attribut et enregistre le dossier sans passer par la procédure de validation normale . Ceci est particulièrement utile pour les indicateurs booléens sur enregistrements existants.

On dirait que c'est une lacune pour vous aider à éviter la surcharge de la validation lorsque vous faites un tweak rapide à un enregistrement. Si vous voulez la validation, il suffit d'utiliser

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

qui a fonctionné. Merci beaucoup – cbrulak

Questions connexes