0

在我的一个观点中,我有这个代码:

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