0

住宅ローンの金利を比較するための基本的なアプリを作成しており、次の 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>
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 に答える