如何干掉这个红宝石if-then声明?

时间:2017-04-29 03:41:46

标签: ruby-on-rails ruby dry

我有以下代码,看起来很简单,我想要它做什么:

if @initial_that.present?
  @that = @initial_that
  get_talk_api_response
else
  get_talk_api_response
end

看起来我可以让它干,但不知道如何。

2 个答案:

答案 0 :(得分:2)

我确定这个重构有一个计算机科学名称,但你在两个分支中调用get_talk_api_response,所以把它放在条件之外:

if @initial_that.present?
  @that = @initial_that
end

get_talk_api_response

然后根据热门评论让它看起来更像红宝石:

@that = @initial_that if @initial_that.present?
get_talk_api_response

答案 1 :(得分:0)

由于您使用的是present?方法,我假设您的代码位于Rails应用中,因此您只需使用presence方法:

@that = @initial_that.presence || @that
get_talk_api_response

来自guides

  

2.2存在

     

存在方法返回其接收方(如果存在?),否则返回nil。