2013-02-17 46 views
0

讓我們看看這個當前的代碼,它的工作原理,但它不是DRY使用更好的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命令,也許我們可以將這些值以某種方式放在數組或哈希等中,然後在這個方法中循環。但我對所有這些語言和語法都很陌生,我該如何實現?或者也可以,如果你有更好的想法來實現這一切都是很大的歡迎和讚賞:)

回答

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 
+0

我看到這與以前發佈的cthulu的答案基本相同。 cthulu首先回答,所以大概值得勾選(如果錯誤在那裏得到糾正)。 – 2013-02-17 19:31:45

+0

不錯......你能以某種方式取出數組的這三行數組,並將它們放在單獨的變量中嗎?所以我們可以在「.each」之前使用該變量的名稱? – Bohn 2013-02-17 19:32:17

+1

@bdota,當然。只要說'myvar = [...]'然後'myvar.each do | name,target | ...'。如果變量名稱幫助解釋代碼正在做什麼或者是否在其他代碼中使用相同的數組,那麼這將是一件好事。 – 2013-02-17 19:35:28

1

請看一看這個要點:https://gist.github.com/cthulhu666/4972937

+0

感謝,但我認爲,在WHERE子句中,你只是訪問第一個aaray ...所以其他兩個不會被插入到表中? – Bohn 2013-02-17 19:19:39

+0

還有:organization_id發生了什麼? – Bohn 2013-02-17 19:20:47

+1

OFC有一些錯誤,我只是想表明這個想法。 – cthulhu 2013-02-17 19:50:43