2

これは非常に基本的なことですが、うまくいきません。フィールド入力を大文字にするコールバック (after_save) を追加したいと考えています。

私のモデルには次のものがあります。

after_save :upcase_tax_label

def upcase_tax_label
   self.tax1_label.upcase!
   self.tax2_label.upcase!
end

したがって、編集するときは、値を大文字にして CAPS でレンダリングする必要があります。だがしかし。どうしたの?ご協力いただきありがとうございます

4

2 に答える 2

3

after_saveupcaseモデルがデータベースに保存された後にメソッドを実行します。つまり、保存が完了した後、メモリ内のオブジェクト属性を大文字にするだけです。それはあなたが望むものではありません。

before_save代わりに、オブジェクトがデータベースに書き込まれる前に属性が大文字になるように使用します。

before_save :upcase_tax_label

private
def upcase_tax_label
   tax1_label.upcase!
   tax2_label.upcase!
end

肝心なのは、データベースに変更を加えるには、モデルを明示的に保存する必要があるということです。それまでは、メモリ内のオブジェクトで遊んでいるだけです。

于 2011-07-20T11:52:12.047 に答える
1
before_save 

動作します。ただし、この状況ではカスタム セッターを作成する方が一般的にはスタイルが良いと考えられています。次のようになります。

def tax1_label=(val)
  write_attribute(:tax1_label, val.upcase)
end

def tax2_label=(val)
  write_attribute(:tax2_label, val.upcase)
end
于 2014-01-10T18:43:38.403 に答える