2011-04-27 80 views
1

我想重構這段代碼是不會幹的所有:)Rails 3 - 如何重構這段代碼?

def my_method 
if session[:my_params].try(:include?, :answer) 
    session[:my_params][:answer] 
elsif session[:my_params].try(:include?, :question) 
    session[:my_params][:question] 
end 
end 

有沒有一種方法隱含在回報:answer:question取決於哪一個存在(如果存在)session[:my params]

回答

1

如果某個密鑰沒有與之關聯的值,則散列將返回nil。因爲nilfalse在條件中都處理相同,所以我們可以非常積極地縮短此方法。 if session[:my_params]確保session[:my_params]不是零。

def my_method 
    session[:my_params][:answer] || session[:my_params][:question] if session[:my_params] 
end 
+0

完美,偉大工程,我應該有以前的那種想法:) – invaino 2011-04-27 17:02:09

0
def my_method 
    session[:my_params][:answer] || session[:my_params][:question] 
end 

將返回nil如果都不存在。

當然這是假定[:answer][:question]值不故意假的,例如false

0
def my_method 
    h = session.fetch(:my_params, {}) 
    h[:answer] || h[:question] 
end