0

私は典型的なPostモデルを持っています:

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)修正に関する提案?

ありがとう

4

1 に答える 1

6

ActiveRecord::Persistence のドキュメントupdate_attributeのエントリから:

単一の属性を更新し、通常の検証手順を経ずにレコードを保存します。これは、既存のレコードのブール フラグに特に役立ちます。

レコードを急遽調整するときに、検証のオーバーヘッドを回避するのに役立つ抜け穴のようです。検証が必要な場合は、使用してください

@post.update_attributes(:user_id => session[:userid])
于 2010-03-19T03:09:58.083 に答える