2013-06-12 59 views
1

我有一些形式,我將params傳遞給update_attributes。還有一些值,它是一個整數(在數據庫中),但在形式上它是一個文本,我想在before_validation中解析它。在驗證之前,Rails是否會自動執行轉換?

控制器:

@organization.update_attributes(params[:organization]) 

型號:

before_validation do 
    logger.info(self.capital.to_s) 

    return if self.capital.blank? 
    self.capital = self.capital.gsub(/([$\,\s]|\.\d+)/, '') unless self.capital.is_a?(Fixnum) 
    self.capital = nil if self.capital < 1 
end 

的問題是,我希望在before_validation,即self.capital仍然是一個字符串。但它是一個整數。所以在Rails自動執行.to_i轉換之前。我怎樣才能防止/解決這個問題?

回答

0

您可以使用@attributes實例變量(也可以通過attributes_before_type_cast實例方法訪問)。

0

如果您想在保存之前操作大寫,您可以使用中間字段 - 因此您需要在表單上放置「capital_selection」並將其包裝。

def capital_selection 
    capital 
end 

def capital_selection=(other) 
    self.capital = Integer(other) 

    rescue ArgumentError 
    self.errors.add(:capital_selection, "is not an integer") 
end 
相關問題