2016-06-30 3 views
0

私のビューイメージは次のとおりです。Rails:値が存在する場合、 "each" roopの最初の値にテキストを追加する方法

私がしたいのは、Total:を最初の行に表示することです。

Total: USD 12.34 
     EUR 23.45 
     GBP 34.56 

データ数は、データの有無に応じて変更される場合があります。

Total: AUD 45.67 

データがない場合は何も表示されません。

each_with_indexを試しましたが、currencyamountがない場合は動作しません。

サンプルデータ

room_id | event_id | currency | amount | 
    1  |  3 |   |  | 
    2  |  4 | 1  | 12.34 | 

... 
<% room.amounts.group(:currency).sum(:amount).each_with_index do |(currency, amount), index| %> 

    <% if index == 0 %> 
    Total 
    <% end %> 

    <% if currency.present? && amount.present? && amount > 0 %> 
    <div align="right"> 

     <% if currency == 1 %> 
     USD 
     <% elsif currency == 2 %> 
     EUR 
     <% elsif currency == 3 %> 
     GBP 
     ... 
     <% end %> 

     &nbsp; 

     <%= number_to_currency(amount, :format => "%n", :precision => 2) %> 

    </div> 

    <% end %> 

<% end %> 
... 

スキーマ私が試したが

create_table "amounts", force: :cascade do |t| 

    t.integer "room_id" 
    t.integer "event_id" 
    t.integer "currency" 
    t.decimal "amount" 
    ... 

SOM電子コードでは、私は解決策を考え出すことができませんでした。

私が望むものを実現する方法を教えていただければ幸いです。

答えて

0

これはあまりクリーンではありません。あなたは多くの視野に入っていなければなりません。しかし、あなたはそれがループの中であなたにインデックスを与えるeach_with_index使用して、インデックス== 0はので、ここで総

を表示したい場合:

room.amounts.group(:currency).sum(:amount).each_with_index do |currency, amount, index| 

後で...

ある
<% if index == 0 %> 
    Total 
<% end %> 

それをやり遂げる簡単な方法。

EDIT

ので、あなたが同様に含めるこの行があると思われ

<% if currency.present? && amount.present? && amount > 0 %> 
あなたは

room.amounts.group(:currency).sum(:amount) 

<% total_added = false %> 
room.amounts.group(:currency).sum(:amount) 

後でこの行の後に、この行の前にこれを追加することができます

<% if currency.present? && amount.present? && amount > 0 %> 
.. 
<% if total_added == false %> 
    Total: 
    <% total_added = true %> 
<% end %> 

だから、合計が追加されていればそれをチェックして、それを再び設定しないようにtrueに設定してください。

私の意見では、複雑な条件やレンダリングはしないでください。 )、これを清潔にしてリファクタリングする助けとなるヘルパー。しかし、それは少なくとも開始のために働くべきです。

+0

@Mirza Memicに感謝します。第1行に「通貨」と「金額」がなく、第2行にデータがある場合は機能しません。私は質問の冒頭にサンプルデータを追加しました。 – SamuraiBlue

+0

通貨がない場合でもこの行は表示されますか? –

+0

はい、「Total」は@Mirza Memicと表示されます。私は私の意見を編集しました。 – SamuraiBlue

関連する問題