Rails 3 - 如何重构这段代码?

时间:2011-04-27 16:40:26

标签: ruby ruby-on-rails-3 refactoring

我想重构这段根本不是DRY的代码:)

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]中存在哪一个(如果存在)?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

def my_method
  session[:my_params][:answer] || session[:my_params][:question]
end
如果两者都不存在,

将返回nil

这当然假设[:answer][:question]值并非故意错误,例如false

答案 2 :(得分:0)

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