1

我有一些表格,我将参数传递给 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_validationself.capital 中仍然是一个字符串。但它是一个整数。所以在 Rails 自动进行.to_i强制转换之前的某个地方。我该如何预防/解决这个问题?

4

2 回答 2

0

您可以处理您的@attributes实例变量(也可以通过attributes_before_type_cast实例方法访问)。

于 2013-06-12T11:38:06.777 回答
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
于 2013-06-12T12:05:58.200 回答