使用更好的ActiveRecord命令和数组,哈希在Rails中保持代码DRY?

时间:2013-02-17 18:52:53

标签: ruby-on-rails ruby rails-activerecord

让我们看看这个当前代码,它可以工作,但它不是DRY

def create_key_performance_indicators
  organization_aco = Organization.find_by_name('ACO').id
  KeyPerformanceIndicator.where(name: 'ED Visits per 1,000').first_or_create(
    target: 100,
    organization_id: organization_aco
  )
  KeyPerformanceIndicator.where(name: 'Average Length of Stay').first_or_create(
    target: 5,
    organization_id: organization_aco
  )
  KeyPerformanceIndicator.where(name: 'Admits per 1,000').first_or_create(
    target: 100,
    organization_id: organization_aco
  )
end

因此,有一个名为 KeyPerformanceIndicators 的表,其外键具有组织表的organization_id字段。

首先要清理的是KeyPerformanceIndictor.where命令的三次复制粘贴,也许我们可以将这些值以某种方式放在数组或哈希等中......并且只是在这个方法中循环它们。但我对所有这些语言和语法都很陌生,我怎样才能做到这一点?或者如果你有更好的想法来实现这一点,所有人都非常欢迎和赞赏:)

2 个答案:

答案 0 :(得分:1)

请看一下这个要点:https://gist.github.com/cthulhu666/4972937

答案 1 :(得分:1)

怎么样......

def create_key_performance_indicators
  organization_aco = Organization.find_by_name('ACO').id
  [
    [ 'ED Visits per 1,000'    , 100 ] ,
    [ 'Average Length of Stay' , 5   ] ,
    [ 'Admits per 1,000'       , 100 ]
  ].each do |name, target|
      KeyPerformanceIndicator.where(name: name).first_or_create(
        target: target,
        organization_id: organization_aco
      )
  end
end