我有一些形式,我传递参数到update_attributes。还有一些值,它是一个整数(在数据库中),但在形式上它是一个文本,我想在before_validation中解析。
控制器:
@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
中,那个自我。资本仍然是一个字符串。但它是个整数。所以在Rails自动做.to_i
转换之前。我怎样才能预防/解决这个问题?
您可以在您的@attributes
实例变量上工作(也可以通过attributes_before_type_cast
实例方法访问)
如果您想在保存它之前操作它,您可以使用一个中间字段-所以您将"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