【问题标题】:How to DRY up repetitive Ruby code?如何干掉重复的 Ruby 代码?
【发布时间】:2013-08-29 18:17:41
【问题描述】:

我对 ruby​​ 比较陌生。这个可以晒干吗?怎么做?

def primary_phone
  number_to_phone self.primary_phone_number
end

def primary_phone=(number)
  self.primary_phone_number = number.gsub(/\D/, '')
end

def secondary_phone
  number_to_phone self.secondary_phone_number
end

def secondary_phone=(number)
  self.secondary_phone_number = number.gsub(/\D/, '')
end

def fax
  number_to_phone self.fax_phone_number
end

def fax=(number)
  self.fax_phone_number = number.gsub(/\D/, '')
end

我在 Rails 中使用此代码作为数据库(将数字存储为整数)和用户表单(将数字作为字符串输入)之间的一种缓冲区。

【问题讨论】:

  • 看起来您需要定义一个自定义数据类型。我没有在 ActiveRecord 中这样做过,我假设您将其用于您的数据模型?
  • 是的,我正在使用 ActiveRecord。如何创建自定义数据类型?知道任何好的链接还是我在某处寻找一些文档?
  • 我用谷歌搜索了它,但我不确定自定义数据类型是否是我正在寻找的。这似乎是矫枉过正。我只想获取和设置具有特殊格式的整数,这种格式已经被 rails 支持一半了。

标签: ruby-on-rails ruby coding-style dry code-cleanup


【解决方案1】:

你只需要,

before_save :sanitize_phone_number_fields

def sanitize_phone_number_fields
  [:primary_phone, :secondary_phone, :fax].each{|attr| self.send(attr).gsub!(/\D/, '')}
end

【讨论】:

  • 太棒了,正是我需要的!谢谢。
  • 在这里使用.each,而不是.map。您只是在迭代,而不是尝试创建新版本的数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
相关资源
最近更新 更多