Ruby on rails 使用更好的ActiveRecord命令和数组、散列保持Rails中的代码干燥?

Ruby on rails 使用更好的ActiveRecord命令和数组、散列保持Rails中的代码干燥?,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,让我们看一下当前的代码,它可以工作,但不能 因此,有一个名为KeyPerformanceIndicators的表,它有一个外键,该外键带有组织表的组织id字段 首先要清理的是三次拷贝粘贴keyperformanceindicator.where命令,也许我们可以把这些值放在数组或散列中,等等…然后在这个方法中循环。但我对所有这些语言和语法都很陌生,我如何才能做到这一点呢?或者,如果你有更好的想法来实现这一点,我们非常欢迎并感谢你:)请看一下要点:怎么样 def create_key_perfor

让我们看一下当前的代码,它可以工作,但不能

因此,有一个名为KeyPerformanceIndicators的表,它有一个外键,该外键带有组织表的组织id字段


首先要清理的是三次拷贝粘贴
keyperformanceindicator.where
命令,也许我们可以把这些值放在数组或散列中,等等…然后在这个方法中循环。但我对所有这些语言和语法都很陌生,我如何才能做到这一点呢?或者,如果你有更好的想法来实现这一点,我们非常欢迎并感谢你:)

请看一下要点:

怎么样

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

谢谢,但我认为在WHERE子句中,您只是访问了第一个aaray…所以其他两个不会被插入表中?还有:organization_id发生了什么?我看到这与之前发布的cthulu的答案基本相同。cthulu首先回答,所以大概应该打勾(如果错误被纠正的话)。很好。。。你能把这三行数组取出,放到一个单独的变量中吗?所以我们可以在“.each”?@bdota之前使用该变量的名称。只需说
myvar=[…]
,然后说
myvar。如果变量名有助于解释代码在做什么,或者如果相同的数组也将用于其他代码中,那么这将是一件好事。嗯……但是在他的代码的第二行中,他只传递了第一个数组的名称。看我在他的帖子下面的评论。首先,你要让代码正常工作,然后看看你必须考虑什么样的重复模式。提前计划尚未完成的重复类型会适得其反——您只需要使用更复杂的代码来处理可能存在或可能不存在的条件。一般来说,目标是实现您现在需要的最简单的代码,并在您需要的“现在”发生更改时再次重构。
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