如何在编辑现有字段时更新“sum”字段?

时间:2015-12-06 11:21:53

标签: ruby-on-rails ruby rails-activerecord

我有一个带有num1 num2和sum字段的Items控制器。我想在edit.html.erb中编辑num1或num2时更新数据库中的sum字段。为了计算用户输入时的总和字段,我已经在使用回调

before_create :set_sum_value

private
def set_sum_value
  self.sum = (self.num1 + self.num2)
  true
end

在更新num1,num 2时我应该使用什么回调以便自动计算总和?

2 个答案:

答案 0 :(得分:0)

不要使用回叫,你不需要它。覆盖num1num2的setter,以便每次更改值时,总和会自动更新。

class Model

  def num1=(value)
    update_sum
    write_attribute(:num1, value)
  end

  def num2=(value)
    update_sum
    write_attribute(:num2, value)
  end

  private

  def update_sum
    self.sum = num1.to_i + num2.to_i
  end

end

在这里使用回调不是合适的选择。

  • 仅在创建发生时执行回调。因此,如果您更改num1num2并致电.sum,则会返回错误的值。
  • 更新对象时不执行回调
  • ActiveRecord中的回调被滥用

另请注意,在update_sum中,我将bot数值强制为整数。实际上,除非确保num1转换为0,否则您可以将nil值设置为nil,这会导致计算总和时出现崩溃,除非您确保将 ".container": { backgroundColor:"white" } "#select_language_pannel": { layout: 'vertical', width: '84%', height: '45%', image: '/images/select_language_pannel.png' } "#language_label":{ top: '20%', color : '#008c99', width: '100%', textAlign: 'center', text: L('select_language'), font: {fontSize: '18dp', fontWeight:"bold"} } "#arabic_button": { layout: 'vertical', top: '40%', width: '64%', height: '13%', backgroundImage : '/images/btn_login_common_normal.png', backgroundSelectedImage: '/images/btn_login_common_pressed.png' } "#arabic_text": { layout: 'vertical', color: '#008c99', height: '100%', highlightedColor: '#FFFFFF' } "#english_button": { layout: 'vertical', top: '60%', width: '64%', height: '13%', backgroundImage : '/images/btn_login_common_normal.png', backgroundSelectedImage: '/images/btn_login_common_pressed.png' } "#english_text": { color: '#008c99', height: '100%', highlightedColor: '#FFFFFF' } "#select_language_pannel": { layout: 'vertical', width: '84%', height: '45%', image: '/images/select_language_pannel.png' } "#language_label":{ top: '20%', color : '#008c99', width: '100%', textAlign: 'center', text: L('select_language'), font: {fontSize: '18dp', fontWeight:"bold"} } "#arabic_button": { layout: 'vertical', top: '40%', width: '64%', height: '13%', backgroundImage : '/images/btn_login_common_normal.png', backgroundSelectedImage: '/images/btn_login_common_pressed.png' } "#arabic_text": { layout: 'vertical', color: '#008c99', height: '100%', highlightedColor: '#FFFFFF' } "#english_button": { layout: 'vertical', top: '60%', width: '64%', height: '13%', backgroundImage : '/images/btn_login_common_normal.png', backgroundSelectedImage: '/images/btn_login_common_pressed.png' } "#english_text": { color: '#008c99', height: '100%', highlightedColor: '#FFFFFF' } 转换为0。

答案 1 :(得分:0)

您可以将此代码放入模型中:

   after_validation :set_sum_value

   def set_sum_value
      self.sum = num1 + num2
   end