Ruby ternary operator if else

时间:2015-07-13 21:01:12

标签: ruby-on-rails ruby ternary

How would you make this ternary?

if @user.skill.present?
    @skill = @user.skill
else
    @skill = Skill.new
end 

4 个答案:

答案 0 :(得分:3)

@skill = @user.skill || Skill.new

如果@ user.skill的值为nil,则将下一个值(Skill.new)设为@skill。

答案 1 :(得分:1)

我会用:

@skill = @user.skill.present? ? @user.skill : Skill.new

但是,ternery声明通常不会提高可读性/可维护性。它们也不会提高处理速度。他们对一些Ruby代码商店和编码风格感到不满,因为它们太容易被滥用/滥用。

在这种情况下使用if / else是完全合适的,所以不要害怕走那条路。考虑一下:如果您使用三元运算符编写逻辑,并且需要对返回值添加其他处理,则无论如何都必须切换到使用常规if / else处理,否则您将生成一些可怕的代码会降低其可读性。

答案 2 :(得分:0)

you can try

@user.skill.present? ? @skill = @user.skill :  @skill = Skill.new

答案 3 :(得分:0)

@skill = @user.skill.present? ? @user.skill : Skill.new

perhaps more readable as a two liner

@skill = @user.skill
if @skill.blank? @skill = Skill.new