2014-04-01 78 views
0

考慮下面的嵌套散列文件:紅寶石:通過重複填充變量通嵌套散列文件

SQL_LIST_ODS = { 

foo_TableA: { 
    load_mode: "do_whatever1", 
    query: <<EOS, 
    select foo1, foo2, foo3 from foo_TableA 
EOS 
} 

foo_TableB: { 
    load_mode: "do_whatever2", 
    query: <<EOS, 
    select foo1, foo2, foo3 from foo_TableB 
EOS 
} 

} 

需要根據的#{LOAD_MODE}(例如,無論是「do_whatever1」或「do_whatever2值來執行各種任務」這裏是我到目前爲止的一個片段:

require "./eas_etl_ods-oltp1_fulltbl_sql_ods.rb" 
... 
sql_list = SQL_LIST_ODS.dup # from separate sql file 

sql_list.each_pair do # ***OR*** should this be sql_list.each do (vs each_pair)? 
    <<<insert logic here -- see notes below>>> 
end 

這是我們需要執行的基本邏輯(僞代碼):

  • 測試#{load_mode} ==「do_whatever1」然後用#{query}做些什麼。
  • 否則做別的事情與#{查詢}。

你能幫助驗證嵌套哈希文件並完成片段W /正確的語法嗎?

+0

需要先通過的第一個元素之間用逗號隔開來糾正你的語法'SQL_LIST_ODS'。當問一個問題時,確保你期望運行的代碼實際上確實是一個好主意。 –

回答

0

你缺少foo_Tables之間的逗號。

然後嘗試:

sql_list.each do |key, value| 
    if value[:load_mode] == "do_whatever1" 
    # do something with value[:query] 
    else 
    # do something else 
    end 
end 

如果你想與紅寶石1.8兼容,使用此語法:

SQL_LIST_ODS = { 

:foo_TableA => { 
    :load_mode => "do_whatever1", 
    :query => <<EOS, 
    select foo1, foo2, foo3 from foo_TableA 
EOS 
}, 

:foo_TableB => { 
    :load_mode => "do_whatever2", 
    :query => <<EOS, 
    select foo1, foo2, foo3 from foo_TableB 
EOS 
}, 

} 
+1

我相信,提問者是使用'鍵:這是在1.9版推出value'語法。 –

+0

除了關於哈希語法的位(除了缺失的逗號之外),這個答案是正確的。如果不是那樣的話,我會投票。 – Max

+0

啊,不知道有什麼新的哈希語法。長大1.8.x :-)編輯回答。 –