住宅ローンの金利を比較するための基本的なアプリを作成しており、次の 3 つのモデルがあります。
bank
has_many :rates
rate
belongs_to :bank
belongs_to :term
term (i.e. the length the rate is valid for)
has_many :rates
http://i.stack.imgur.com/vC9xp.pngのような基本的な html テーブルにそれらを出力しようとしましたが、私のコードはレートを正しい用語に合わせていません。
<table>
<tr>
<td></td>
<% @terms.each do |term| %>
<td><%= term.length %> months</td>
<% end %>
</tr>
<% @banks.each do |bank| %>
<tr>
<td><%= bank.name %></td>
<% bank.rates.each do |rate| %>
<td><%= rate.rate %></td>
<% end %>
<% end %>
</tr>
</table>
レートが有効な条件に一致していることを確認するにはどうすればよいですか? 私が見つけた最も近い答えはこれですが、うまくいかないようです。また、欠落している簡単な解決策があるに違いないと確信しているため、機能を提供するためにgemを使用しないようにしたいと考えています。
前もって感謝します!
編集1:
私は今、私が求めていたものを出力していますが、それはかなり非効率的であるため、かなり整理することができると確信しています. オブジェクト配列からレートを選択しなければならない理由は、すべての銀行が特定の長さのレートを持っているわけではないため、それらを順番に並べ替えて印刷することができないからです。コードを改善するための提案は大歓迎です!
<table>
<tr>
<th></th>
<% @terms.each do |term| %>
<th><%= term.length %> months</th>
<% end %>
</tr>
<% @banks.each do |bank| %>
<% @bank_rates = bank.rates.sort{ |a,b| a.term.length <=> b.term.length } %>
<tr>
<td><%= bank.name %></td>
<td><% @rate = @bank_rates.select { |rate| rate.term.length == 0 } %><%= @rate[0].try(:rate) %></td>
<td><% @rate = @bank_rates.select { |rate| rate.term.length == 6 } %><%= @rate[0].try(:rate) %></td>
<td><% @rate = @bank_rates.select { |rate| rate.term.length == 12 } %><%= @rate[0].try(:rate) %></td>
<td><% @rate = @bank_rates.select { |rate| rate.term.length == 18 } %><%= @rate[0].try(:rate) %></td>
</tr>
<% end %>
</table>