0

我试图避免让我的模型在保存时设置 updated_at 属性而不进行任何更改。通过调试过程,我注意到“已更改”数组列出了一个属性,我知道该属性实际上并未从表单中更改。然而,该属性确实有一个 reader 方法。该方法给出的结果与其当前状态不同。有没有办法在阅读器方法中手动清除该属性上的“已更改”标志?

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

如果没有列出任何混合百分比,基本上“混合”方法会发出“100% [品种名称]”。这显然会干扰“已更改”标志...

4

1 回答 1

0

我避免覆盖字段读取器,因为这使我无法直接访问存储在数据库中的值(即无需调用 read_attribute)以获取其他逻辑。当您需要检查数据库中是否确实存储了一个值或遇到存储了一个值但它也是“100% some-varietal”格式的情况时,这很麻烦,我想如果你有为此的表单字段。

我通常添加这样的东西:

def blends_description
  if blends.nil?
    "100% #{ name.split(" ").map { |w| varietals.include?(w.downcase) ? w : nil }.compact.join(" ") }"
  else
    blends
  end
end
于 2013-02-14T03:37:38.980 回答