在验证之前,Rails会自动强制转换吗?



我有一些形式,我传递参数到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

相关内容

  • 没有找到相关文章

最新更新