AJAXで処理書くと、どうしてもCreateの時はデータが不完全でもとりあえず作りたい。みたいなことがあって、それは validate_on_create, validate_on_update
で分けたり、各 validates_on_** :on => :update
みたいな感じにかけばいいんだけど、sortable_list
とかで単一フィールドだけごにょごにょやりたいときは結構困る。
そんなときに使えそうなメソッド。があったんだけど、特に必要がなかったことがわかったという話。
activerecord-2.0.2/lib/active_record/validations.rb : line 932
引数にfalse渡せば、Validationをスキップしてsave出来る。
# The validation process on save can be skipped by passing false. The regular Base#save method is
# replaced with this when the validations module is mixed in, which it is by default.
def save_with_validation(perform_validation = true)
if perform_validation && valid? || !perform_validation
save_without_validation
else
false
end
end
activerecord-2.0.2/lib/active_record/validations.rb : line 953
こっちは、update_attribute のValidation無し版。
# Updates a single attribute and saves the record without going through the normal validation procedure.
# This is especially useful for boolean flags on existing records. The regular +update_attribute+ method
# in Base is replaced with this when the validations module is mixed in, which it is by default.
def update_attribute_with_validation_skipping(name, value)
send(name.to_s + '=', value)
save(false)
end
と思ってソースを見てみたんだけど、save(false) って書いてあって、どうみても ValidationをSkipする方法でした。
validation を skip して save するときは 引数に false を渡す save(false) ということらしい。
update_attribute_with_validation_skipping(name, value)
とかは、ぱっとみて何やってるかわかるんだけど、 save_with_validation(false)
は一見して何してるか分かりにくいけど、 save(false)
を知らないならどっち見ても分からないからかわらんねー。と思ったよ。