2013-06-12 30 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 
相关问题