2014-03-26 82 views
14

我想在视图中写入单行if语句。Rails单行if else语句

<%= collection.name ? collection.name : @miniature.name %> 

我想如果存在,它把collection.name,否则,我希望它把@ miniature.name

+2

什么是错的代码,你提供的? –

回答

22

为了使它更加清晰,你可以使用逻辑ORActiveSupport'sObject#presence(放collection.name只有当它存在,并且不为空):

<%= collection.name.presence || @miniature.name %> 

如果你想显示collection.name如果不是nil,但它是空白(空字符串或字符串续只有空白),它将足够具有:

<%= collection.name || @miniature.name %> 
+0

这似乎是一个非常优雅的做法。我没有意识到你可以使用那样的存在。 – Ossie

+1

@WorldOfProper你可以,因为在对象为空的情况下,'presence'返回'nil',在任何逻辑语句中都被视为'false'。 –

+0

什么是downvote为?请给予解释。 –

23

首先检查是否存在collection.name

<%= collection.name.present? ? collection.name : @miniature.name %> 
+1

三元运算符 - http://stackoverflow.com/questions/1428708/remembering-the-ternary-operator-syntax –

+1

是的,我知道 - 我只是参考OP如果他想研究 –

+0

'如果nil'不会抛出任何错误,它的行为完全像'如果错误'。 –

0

你不能有

<%= collection.name ||= @minature.name %> 

对于那些谁downvoted - Set Ruby variable if it is not already defined

+0

对不起,我正在写作一个对话 - 让我改变 –

+2

我不明白。这不会做OP所期望的(显示'collection.name'或'@ miniature.name'),但会做OP所不期望的(如果@collection设置'collection.name'为'@ miniature.name' .name'是'nil')。 –

+0

我相信我的回答提供了一个有效的答案OP –