小编Ada*_*eod的帖子

引发属性访问器覆盖中的错误?

我重写了ActiveRecord中的属性访问器,将"hh:mm:ss"格式的字符串转换为秒.这是我的代码:

class Call < ActiveRecord::Base
  attr_accessible :duration

  def duration=(val)
    begin
      result = val.to_s.split(/:/)
             .map { |t| Integer(t) }
             .reverse
             .zip([60**0, 60**1, 60**2])
             .map { |i,j| i*j }
             .inject(:+)
    rescue ArgumentError
      #TODO: How can I correctly report this error?
      errors.add(:duration, "Duration #{val} is not valid.")
    end
    write_attribute(:duration, result)
  end

  validates :duration, :presence => true,
                       :numericality => { :greater_than_or_equal_to => 0 }

  validate :duration_string_valid

  def duration_string_valid
    if !duration.is_valid? and duration_before_type_cast
      errors.add(:duration, "Duration #{duration_before_type_cast} is not valid.")
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我试图在验证期间有意义地报告此错误.我所拥有的前两个想法包含在代码示例中.

  1. 添加到访问器覆盖内部的错误 - …

ruby-on-rails attr ruby-on-rails-3

0
推荐指数
1
解决办法
423
查看次数

标签 统计

attr ×1

ruby-on-rails ×1

ruby-on-rails-3 ×1