2014-01-24 32 views
1

是否可以動態創建哈希鍵名?我通過以下哈希參數:在Rails 4中動態創建哈希鍵名字

params[:store][:store_mon_open(5i)] 
params[:store][:store_mon_closed(5i)] 
params[:store][:store_tue_open(5i)] 
params[:store][:store_tue_closed(5i)] 
. 
. 
. 
params[:store][:store_sun_open(5i)] 
params[:store][:store_sun_closed(5i)] 

要檢查是否每一個參數存在,我用兩個數組:

days_of_week = [:mon, :tue, ..., :sun] 
open_or_closed = [:open, :closed] 

但是,我似乎無法弄清楚如何動態創建params哈希表(第二個鍵(用數組這裏是我到目前爲止:

days_of_week.each do |day_of_week| 
    open_or_closed.each do |store_status| 
    if !eval("params[:store][:store_#{day_of_week}_#{store_status}(5i)").nil 
     [DO SOMETHING] 
    end 
    end 
end 

我已經嘗試了一堆東西,包括eval方法(如上所列),但軌道似乎不喜歡parenthese s圍繞「5i」。任何幫助是極大的讚賞!

回答

3

你應該能夠做到

if params[:store]["store_#{day_of_week}_#{store_status}(5i)".to_sym] 

注意,你失蹤.nil??!object.nil?可縮短至僅僅object

+0

謝謝,亞歷克斯!像魅力一樣工作! – Vee

1

假設這是一個HashWithIndifferentAccess,你應該能夠就像使用符號一樣,通過字符串訪問它。因此:

days_of_week.each do |day_of_week| 
    open_or_closed.each do |store_status| 
    key = "store_#{day_of_week}_#{store_status}(5i)" 
    unless params[:store][key] 
     # DO SOMETHING 
    end 
    end 
end 

如果它不是一個HashWithIndifferentAccess,那麼你就應該能夠調用key.to_sym把它變成一個符號。