2017-07-26 8 views
0

私は現在ルビーを学んでいますが、組み込みのルビーを手に取ることはできません。Emebedded Ruby:Short Ifステートメント

私は基本的に(そしてこのpost)この

ようにそれを書くことなどできるはずです私の理解によると、文の場合、私の埋め込まれたルビー

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

にこの短いバージョンを作成しようとしています

<% 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'はそれぞれ括弧で囲まれている必要がありますその内部に 'function(args)'形式を使用する必要があり、空白ではない( '+ -/*'などは例外です)。たとえば、「本当ですか?本当ですか? TrueClass:false'はエラーを発生させますが、 'true? true.is_a?(TrueClass):false'はしません。三項演算子で返ってきたら 'assertionのようにすることができますか? (何かを返す):(return something_else) ' –

答えて

5

はこれにあなたのコードをリファクタリングlink_to_ifヘルパー、あります:

<% 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 %>