0

犯罪を数える

犯罪のリストが 10 対 11 の場合、新しいリストを作成します。これはその更新版です。申し訳ありません....

 <ul>  
  <% category.crimeheaders.each do |crimeheader| %> 
    <% crimeheader.crimes.each do |crime| %> 
      <li>
        <%= crime.id  %>
      </li>
      <li>
        <%= crime.name %>
      </li>

    <% end %>
  <% end 

%>

どうすればこれを行うことができますか?

4

1 に答える 1

1

わかりました、最初にすべての犯罪のリストを取得する必要があります。犯罪ヘッダーによって構造化されていません。

crimeheadersこれを行う 1 つの方法は、次の関係を通じて、カテゴリ レベルで犯罪への関係を追加することです。

class Category
    has_many :crimeheaders
    has_many :crimes, through: :crimeheaders # this is what you add 
    ...
end

これを取得すると、カテゴリ内のすべての犯罪を 10 のバッチでループできます。

<% category.crimes.each_slice(10) do | batch | %>

<ul>

  <% batch.each do |crime| %>

    <li><%= crime.name %></li>

  <% end %>

</ul>

<% end %>

これにより、カテゴリのすべての犯罪が取得され、一度に 10 のスライスがリストに表示されます。

賢くしたい場合は、実際にデータベースから 10 個のバッチで取得できます。おそらくそれだけの価値はありませんが、アイデアは次のとおりです。

<% Crime.where(category_id: 123).find_in_batches( batch_size: 10 ) do | batch | %>

<ul>

  <% batch.each do |crime| %>

    <li><%= crime.name %></li>

  <% end %>

</ul>

<% end %>
于 2013-09-30T22:35:25.500 に答える