2017-04-07 8 views
0

私はレールが新しく、レコードの更新時に属性の有無を検証するための検証方法を見つけようとしています。その属性が存在しない場合(つまり、要求本体から属性が存在しない場合)、Railsはレコードを更新しません。レコードの更新時に属性の有無を検証する方法は?

validates :description, presence: true 

validates_presence_of :description 

仕事をしていないようです。この目的のための方法はありますか?毎日のシナリオでは非常に一般的なようです。

+0

これは動作するはずですが。もっとコードを貼り付けることはできますか? – Rahul

答えて

2

を:

model.update(hash_that_has_no_description_key) 

、あなたがいないなら:descriptionに触れて::descriptionキーを持たないハッシュをupdateに送信することは、 :description => nilでハッシュで送信します。 modelがすでに有効な場合(つまり、説明がある場合)、update:descriptionには触れないため無効にしません。

あなたはこの言う:その属性は属性が要求本体から存在していない、Railsはレコードを更新するべきではないという意味、存在しない場合

を。

あなたはそれがupdateコールの着信データを準備して、あなたがコントローラでこのロジックに対処する必要があります(モデルは本当に何も知らないはず)リクエストボディの話をしているので。

あなたは、コントローラにチェックし、文句を言うことができます:

data = whatever_params 
if(!data.has_key?(:description)) 
    # Complain in an appropriate manner... 
end 
# Continue as now... 

あるいは全く:descriptionが存在しない場合は、:description => nilを含めることができます

def whatever_params 
    data = params.require(...).permit(...) 
    data[:description] = data[:description].presence # Or however you prefer to do this... 
    data 
end 
関連する問題