ルビーオンレール:オーバーライドモデルの検証をupdate_attributes?
-
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])
所属していません StackOverflow