ルビーオンレール:オーバーライドモデルの検証をupdate_attributes?

StackOverflow https://stackoverflow.com/questions/2474729

  •  21-09-2019
  •  | 
  •  

質問

私は典型的な、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
4行がコメントアウトされていない限り、

しかし、2行目の検証が失敗した場合のポストはまだ作成されます。

1)なぜ?

2)修正の提案?

おかげ

役に立ちましたか?

解決

update_attribute上のエントリのActiveRecordのためのドキュメントから: :永続するます:

  

は、単一の属性を更新して保存します   経由せずに記録   通常の検証手順。これは   上のブールフラグに特に便利   既存のレコードます。

それはあなたがレコードに微調整急ごしらえを作るときに、検証のオーバーヘッドを避けるために抜け穴だように思えます。あなたが検証をしたい場合は、単に使用します。

@post.update_attributes(:user_id => session[:userid])
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top