0

我正在创建一个基本应用程序来比较抵押贷款利率并具有三种模型:

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

2 回答 2

0

使用这个 gem 来制作表格真的很好,应该做你想要的 Wicegrid并且它可以处理关联,查看 github 上的文档

例如,要使表具有用户索引,我做了以下操作:

<div class="container">
  <%= grid(@users_grid, show_filters: :when_filtered) do |g|
    g.column name:  'ID', attribute: 'id', filter: false
    g.column name:  'Username', attribute: 'user_name'
    g.column name:  'First Name', attribute: 'first_name'
    g.column name:  'Last Name', attribute: 'last_name'
    g.column name:  'E-mail', attribute: 'email'
    g.column name:  'Role', attribute: 'name', model: 'Role' do |user|
      user.roles.collect{|role| role.name}.to_sentence
    end
    g.column name: 'Profile'  do |user|
      link_to('View', user_permissions_path(user))
    end
    g.column name: 'Edit' do |user|
      link_to('Update', edit_user_path(user))
    end
    g.column  do |user|
      if can? :destroy, user
       link_to('Delete', user, method: :delete, data: { confirm: 'You sure?' })
    end
  end
  end -%>
  <% if can? :create, @user %>
  <button class="btn btn-success" type="submit" onclick="location.href='/users/new';">Add new user</button>
  <% end %>
</div>
于 2013-09-06T03:06:32.813 回答
0

因为你</tr>应该在循环内但你在外面

看看我的这个部分

 <% @banks.each do |bank| %>
 <tr> 
  <td><%= bank.name %></td>
 <% bank.rates.each do |rate| %>
   <td><%= rate.rate %></td>
 <% end %> 
 </tr>
<% end %>

你会得到我想告诉你的以及你犯了什么错误

<table>
  <thead>
   <tr>
    <% @terms.each do |term| %>
     <th><%= term.length %> months</th> 
   <% end %>
   </tr>
 </thead>
 <tbody>
  <% @banks.each do |bank| %>
   <tr> 
    <td><%= bank.name %></td>
     <% bank.rates.each do |rate| %>
     <td><%= rate.rate %></td>
    <% end %> 
    </tr>
   <% end %>
</tbody>
</table>

希望它会工作......谢谢

于 2013-09-06T04:24:56.250 回答