モデルを変更せずに保存するときに、モデルにupdated_at属性を設定させないようにしています。デバッグプロセスを通じて、「changed」配列に、フォーム内から実際には変更されていないことがわかっている属性がリストされていることに気付きました。ただし、その属性にはリーダーメソッドがあります。その方法では、現在の状態とは異なる結果が得られます。リーダーメソッド内でその属性の「変更された」フラグを手動でクリアする方法はありますか?
Wine.rb
before_save :check_for_changes
def blends
if read_attribute(:blends).nil?
"100% #{ name.split(" ").map { |w| varietals.include?(w.downcase) ? w : nil }.compact.join(" ") }"
else
read_attribute(:blends)
end
end
def check_for_changes
return changed?
end
基本的に、「blends」メソッドは、blend%がリストされていない場合、「100%[品種名]」を出力します。これは明らかに「変更された」フラグを妨害します。