0

私の見解の1つに、次のコードがあります。

<% if params[:icd_id] == '' %>
<% @icd2.each do |f| %>
<% else %>
<% @icd1.each do |f| %>
<% end %>
<%= link_to "#{f.von} - #{f.bis}  #{f.bezeichnung}", diagnose_index_path(:pa_id => @patient, :icd1_id => f.id)%><br>
<% end %>

しかし、何かが間違っています!エラーが発生します:

index.html.erb:18: syntax error, unexpected keyword_else

私は何を間違えましたか?

4

2 に答える 2

4

でブロックを開きdo、次の行はelseです。あなたはそれをすることはできません。

私はあなたがこれをやろうとしていると思います

<% if params[:icd_id] = '' %>
  <% @icd2.each do |f| %>
    <%= link_to "#{f.von} - #{f.bis}  #{f.bezeichnung}", diagnose_index_path(:pa_id => @patient, :icd1_id => f.id)%><br>
  <% end %>
<% else %>
  <% @icd1.each do |f| %>
    <%= link_to "#{f.von} - #{f.bis}  #{f.bezeichnung}", diagnose_index_path(:pa_id => @patient, :icd1_id => f.id)%><br>
  <% end %>
<% end %>

しかし、私はあなたがそれをもっと簡潔にしたいと思っています。このようなことができます

<% (params[:icd_id] == '' ? @icd2 : @icd1).each do |f| %>
  <%= link_to "#{f.von} - #{f.bis}  #{f.bezeichnung}", diagnose_index_path(:pa_id => @patient, :icd1_id => f.id)%><br>
<% end %>

等しいかどうかをチェックする==代わりに使用することにも注意してください。それ以外の場合は常に=params[:icd_id] = ''true

于 2013-08-26T16:46:14.627 に答える
1

二重ループを回避するために、三項演算子を使用して、反復する変数を決定することができます。

<% (params[:icd_id] == '' ? @icd2 : @icd1).each do |f| %>
  <%= link_to "#{f.von} - #{f.bis}  #{f.bezeichnung}", diagnose_index_path(:pa_id => @patient, :icd1_id => f.id)%><br>
<% end %>
于 2013-08-26T16:47:52.067 に答える