Ruby on rails Ruby三元运算符if-else

Ruby on rails Ruby三元运算符if-else,ruby-on-rails,ruby,ternary,Ruby On Rails,Ruby,Ternary,你怎么做这个 if @user.skill.present? @skill = @user.skill else @skill = Skill.new end 你可以试试 @user.skill.present? ? @skill = @user.skill : @skill = Skill.new 也许作为一个双行程序更容易阅读 @skill = @user.skill if @skill.blank? @skill = Skill.new 我会使用: @skill

你怎么做这个

if @user.skill.present?
    @skill = @user.skill
else
    @skill = Skill.new
end 
你可以试试

@user.skill.present? ? @skill = @user.skill :  @skill = Skill.new
也许作为一个双行程序更容易阅读

@skill = @user.skill
if @skill.blank? @skill = Skill.new
我会使用:

@skill = @user.skill.present? ? @user.skill : Skill.new
然而,ternery语句在可读性/可维护性方面通常不是一种改进。它们也不能提高处理速度。在一些Ruby代码商店和编码风格中,它们是不受欢迎的,因为它们太容易被滥用/误用

在这种情况下,使用
if
/
else
是完全合适的,所以不要害怕走这条路。考虑这一点:如果使用三元运算符编写逻辑,并且需要向返回值添加额外的处理,则无论如何都必须切换到使用常规<代码>:/Cuth>Eng/Cuth>处理,否则您将生成一些看起来可怕的代码,这将降低其可读性。
@skill = @user.skill || Skill.new

如果@user.skill的值为零,它将把下一个值(skill.new)指定给@skill。

@skill=skill.new如果@skill.blank?
会更好。使用
@skill=
的多个作业会很混乱/难闻。不要使用三元语句来分支逻辑,使用它们返回两个可能值中的一个:
@skill=@user.skill.present@user.skill:skill.new
您应该提到检查false/nil与使用
present?
保存
present?
逻辑使用
@skill=@user.skill.presence | | skill.new
。(
presence
如果对象为空,则返回
nil
)我使用了
present?
很多次,但从未发现
presence
,谢谢!
@skill = @user.skill || Skill.new