配列での単純な実装に苦労しています。さまざまなクラス メソッドを読みましたが、エレガントなソリューションにたどり着くようにしたいと考えています。
基本的に、特定のシステムにある特定のタグの数の生の数を知りたいです。だからタグbelongs_to :person
と人ができるならhas_many :tags
「青」タグを持っている人の生の合計をどのようにレンダリングするのだろうか (「青」、「赤」、「緑」、および「オレンジ」タグがある場合)。これは私が追求している道ですが、コードはすぐににおいがし始めると思います..
<% @people.each do |person| %>
<% if person.tags.include?('blue') %>
<%= person.id %> # this is where I get stuck
<% end %>
<% end %>
そのため、システム内で青いタグが付いているすべての人物のオブジェクトを表示していますが、生のカウントを取得するには、これらの人物を合計する必要があります。そして、これをビューで数回、各色に 1 回レンダリングする必要があります ( include
.
これはあまり乾燥しないため、においがし始めています。これはクラスメソッドであるべきですか?そして、返された人を配列に戻して呼び出す必要があります.count
か?
最終的に生の数値を取得できますが、ここでのベストプラクティスについて少し迷っています。
- -アップデート - -
これは、Gene のフィードバックに基づいてこれまでに更新されたソリューションです。
今はずっときれいですが、遅いように見えるので、パフォーマンスについて疑問に思っています。
私はヘルパーメソッドを持っています-
def tag_count_for_person(tags_name)
@people.count {|person| person.tags.include?('tags_name') }
end
そして、ビューでレンダリングする必要があるタグに対してこのメソッドを呼び出します。
<div class="well span4">
<%= tag_count_for_person("green") %>
</div>
<div class="well span4">
<%= tag_count_for_person("blue") %>
</div>
<div class="well span4">
<%= tag_count_for_person("red") %>
</div>
<div class="well span4">
<%= tag_count_for_person("hungry") %>
</div>
それはまだ私が信じているにおいがします。ビューで別のタグをレンダリングするたびに、このメソッドを呼び出す必要はありませんか? 費用がかかるようです。しかし、それでは、正しくレンダリングしたいさまざまなタグを追加する柔軟性がありませんか? もっと近くにいるような気がします。