#save
のバリエーションを探していますが、エラーが発生していない の属性のみを保存します。 したがって、モデル全体を有効にすることなくモデルを更新することができ、 は無効なデータのデータベースへの保存を防ぎます。 (:属性)、「有効な属性」、私は@のmodel_instance.errors.onを呼び出すときにnilを与えるそれらの属性を意味することでActiveRecord#save_only_valid_attributes
誰もがこれを実現する方法のアイデアを持っていますか?
はこれまでのところ、私は次のようにあります
def save_valid_attributes
valid?
update_atrtibutes attributes.inject({}){|k, v, m| m[k] = v unless errors_on(k.to_sym); m}
end
私の場合はそこにある割り当てに行って何も処理は、ありません場合、これは動作します。
def nice_start_date=(startdate)
self.start_date = Chronic.parse(startdate) || startdate
end
def nice_start_date
self.start_date.to_s
end
これらの2つの方法は私が正しく、ユーザーが保存する前に慢性使用して日付を入力し解析することができます: は例えば、私は、定義されたデータベースの列「START_DATE」、および2つのメソッドを持っています。だから、これを行うための第二の方法、一度に一つの属性:日付の1が無効であると保存していない場合、それはすべての更なる属性を防ぐことができます、以来
def save_valid_attributes(attrib)
valid?
attrib.each{|(k,v)| send("${k}=", v); save; reload)
end
モデルは、それぞれの時間を再ロードする必要があります保存から。
これを行うより良い方法はありますか?私はこれがRailsの世界では珍しい問題ではないと確信しています。私は知識のGoogleの世界で何かを見つけることができないようです。