2017-07-26 56 views
0

我目前正在学习ruby,但我不能让我的嵌入式红宝石工作proberly和帮助,将不胜感激。Emebedded Ruby:短如果语句

基本上,我试图写的这个if语句的短版在我的嵌入式红宝石

<% entity.attributes.each do |key, value| %> 
    <%= if key == "name" 
     link_to @entity, edit_entity_path(entity) 
     else 
     value 
     end %> 
<%= end %> 

根据我的理解(这post)应该为能写这样的

<% entity.attributes.each do |key, value| %> 
    <%= key == "name" ? link_to @entity, edit_entity_path(entity) : value %> 
<%= end %> 

这似乎并不奏效。我究竟做错了什么?

Ralils错误消息: 语法错误,意想不到的TIVAR,期待 keyword_do或 '{' 或 '(' ... EY == “名称”)? ...

THX在您的帮助

+0

在Ruby中使用三元运算符时,您的'if:else'必须每个都包含在圆括号中,或者如果pass它们需要使用'function(args)'形式而不是空白(除了'+ -/*'等)。例如'真的? true.is_a? TrueClass:false'会产生一个错误,但是“真的? true.is_a?(TrueClass):false'不。如果你使用三元运算符返回,你可以像'断言? (返回东西):(返回something_else)' –

回答

5

有一个link_to_if帮手,这refactors您的代码如下:

<% entity.attributes.each do |key, value| %> 
    <%= link_to_if key == "name", value, edit_entity_path(entity) %> 
<% end %> 
3

你要的参数换到link_to括号:

<%= key == "name" ? link_to(@entity, edit_entity_path(entity)) : value %>