Pergunta

Eu tenho um modelo típico de post:

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

No controlador, eu tenho:

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

No entanto, se as validações na linha 2 falharem, a postagem ainda será criada, a menos que a linha 4 seja comentada.

1) Por quê?

2) sugestões em uma correção?

Obrigado

Foi útil?

Solução

Da entrada em update_attribute dentro O DOC para ActiveRecord :: Persistence:

Atualiza um único atributo e salva o registro sem passar pelo procedimento de validação normal. Isso é especialmente útil para bandeiras booleanas nos registros existentes.

Parece que é uma brecha para ajudá -lo a evitar a sobrecarga de validação quando você faz um ajuste rápido em um recorde. Se você deseja validação, basta usar

@post.update_attributes(:user_id => session[:userid])
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top