2011-04-27 3 views
1

나는 session[:my params] 하나가 존재하는 :answer 또는 :question가 따라 암시 적 중 하나를 반환하는 방법 (있는 경우) 거기에 전혀 :)레일 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 

DRY하지 않습니다이 코드 조각을 리팩토링 하시겠습니까?

답변

1

해시는 키에 연결된 값이없는 경우 nil을 반환합니다. nilfalse은 모두 조건부에서 동일하게 처리되므로이 방법을 매우 적극적으로 줄일 수 있습니다. if session[:my_params]session[:my_params]이 0이 아닌지 확인합니다.

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

완벽한이 잘 작동, 나는 그 생각을하기 전에해야한다 : – invaino

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

은 둘 다 존재하지 않을 경우 nil을 반환합니다.

물론 이것은 [:answer][:question] 값이 고의적으로 false가 아니라고 가정합니다. false.

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