无法在before_save上修改变量?

时间:2012-05-03 07:56:22

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

我的模型中有ff代码:

before_save :before_save_method

attr_accessor :corrective_change
attr_accessible :corrective_change
attr_accessible :corrective_desc

  private 
    def before_save_method
      if corrective_change == 0
        self.corrective_desc = corrective_desc_was
      end
    end

但是,无论corrective_change的值是多少,self.corrective_desc的值仍然会根据用户的输入值进行更新。

测试了所有变量的值,我可以在logger中查看它们就好了,但条件不起作用。

有谁可以指出问题是什么?

非常感谢。

1 个答案:

答案 0 :(得分:0)

1)你确定corrective_change是一个Integer而不是一个字符串吗? (将int与string = fail比较)

2)这是一张新纪录吗?如果是这样,corrective_desc_was可能不存在(它不会在2.3,不确定3.x)

3)考虑尝试这个:

def before_save_method
  if self.corrective_desc_changed? && self.corrective_change == 0
    self.corrective_desc = self.corrective_desc_was
  else
    logger.info "corrective_desc not changed or corrective_change != 0"
  end
end

4)另外,如果它是纠正性的变化,那么也许before_update会更适合而不是before_save,因为这也会在创建时被调用。