2013-08-26 26 views
0

在我的意見我有這樣的代碼:在Ruby代碼意想不到的其他

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

您用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

+0

此外,可能在第一行'='而不是'=='的錯字 –

+0

有沒有更短的? –

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 %> 
相關問題