我正在创建一个基本应用程序来比较抵押贷款利率并具有三种模型:
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>