2016-03-18 18 views
1

私は数日間「特別な」繰り返しをやろうとしていたので、非常に明確にしようとします。特定の値の属性を持つActiveRecordモデルオブジェクトを反復処理する方法はありますか?

ひらがなという名前のカードを作成し、レター(A、E、I、O、U)で定義され、(KA、SA、TA ... KE、SE、TE ... 、O、U =>類似))。

私はインデックスページでそれらを一覧表示するひらがなインスタンスと.eachで繰り返しを行います。

<% @hiraganas.each do |hiragana| %> 
    <li> 
    <%= render 'allhiraganas', hiragana: hiragana %> 
    </li> 
<% end %> 

ビューは、私がhiragana.bigletter方法で反復処理したい

<div class="row"> 
    <ul class="list-inline text-center card-frame"> 
    <li> 
     <div class="card"> 
     <div class="front"> 
      <% if current_user.try(:admin?) %> 
      <%= link_to hiragana_path(hiragana), class:'trash-hiragana', data: { confirm: 'Are you sure?' }, method: :delete do %> 
      <%= image_tag("delete-btn.png") %> 
      <% end %> 
      <% end %> 

      <span class="card-question popover-word" data-content="<h4 class='text-center letter-uppercase'>**<%= hiragana.bigletter.upcase %>**</h4><p class='text-center'><b><%= hiragana.midletter %></b> comme dans <b><%= hiragana.transcription %></b></p>"> 
      <i class="fa fa-eye fa-lg"></i> 
      </span> 

      <!-- son de l'hiragana --> 
      <span class="audioclick popover-word" data-content="<p class='text-center'><b>le son arrive prochainement !</b></p>"> 
      <i class="fa fa-volume-up fa-lg"></i> 
      </span> 
      <!-- image mnémotechnique --> 
      <% if hiragana.upload.blank? %> 
       <div class="idea"> 
       <i class="fa fa-lightbulb-o fa-lg"></i> 
       </div> 
       <% else %> 
       <div class="idea"> 
        <span class="popover-trigger" 
        data-toggle="popover" 
        data-content='<%= cl_image_tag(hiragana.upload, 
        :width => 210, :height => 290) %>'> 
        <i class="fa fa-lightbulb-o fa-lg"></i> 
       </span> 
       </div> 
      <% end %> 

      <!-- <div class="prononciation"> 
      <i class="fa fa-comment"></i> 
      </div> --> 

      <div class="card-hiragana hiragana-<%=hiragana.bigletter.downcase.last%>"> 
      <h1><b><%= hiragana.ideo1 %></b></h1> 
      </div> 

      <div class="card-katakana"> 
      <p><%= hiragana.ideo2 %></p> 
      </div> 
      <div id="favorite_<%=hiragana.id%>"> 
      <%= render 'favs/favorites', hiragana: hiragana %> 
      </div> 
     </div> 
     <div class="back"> 
      <div class="col-sm-3 col-xs-4 col-md-3 containerbackcards-<%=hiragana.bigletter.downcase.last%>"> 
      <div class="backcard-hiragana"> 
       <h1><b><%= hiragana.ideo1 %></b></h1> 
      </div> 
      <div class="card-bigletter"> 
       <h4><%= hiragana.bigletter.upcase %></h4> 
      </div> 
      </div> 
     </div> 
     </div> 
    </li> 
    </ul> 
</div> 

です。

<span class="card-question popover-word" data-content="<h4 class='text-center letter-uppercase'>**<%= hiragana.bigletter.upcase %>**</h4><p class='text-center'><b><%= hiragana.midletter %></b> comme dans <b><%= hiragana.transcription %></b></p>"> 
    <i class="fa fa-eye fa-lg"></i> 
</span> 

私はそうでbigletter を持つすべてのhiraganas縦の列に表示、別の縦の列にbigletter Eディスプレイを持つすべてのhiraganasとを持っていると思いますので。

一部の人々は.selectについて教えてくれましたが、どこに置くべきか分かりません。ひらがなモデルでは?

モデルでコードを乾かすにはどうすればいいですか?ここにひらがなモデルです:

class Hiragana < ActiveRecord::Base 
    belongs_to :user 
    has_many :favs, dependent: :destroy 
    mount_uploader :upload, ImageUploader 
    mount_uploader :sound, SoundUploader 

    def is_faved_by(user) 
    self.favs.where(user: user).take 
    end 
end 

ありがとうございました。

<% @hiraganas.select { |hiragana| hiragana.bigletter == 'a' }.each do |hiragana| %> 
    <%= render 'somehiraganas', hiragana: hiragana %> 
<% end %> 

テンプレート内のコードを最小限に抑えることが望ましいですが、モデル

class Hiragana < ActiveRecord::Base 
    def self.with_bigletter(bigletter) 
    where(bigletter: bigletter).order(:midletter) 
    end 
end 

にメソッドを追加して、結果を割り当てる方が良いでしょう:

答えて

1

私はこれは何をしたいと思いますHiragana.with_bigletter('a')などのテンプレート変数を使用してください。

ActiveRecordを使用してすべてのひらがなにクエリを実行し、with_bigletterselectと回答した方が良いかもしれませんが、実際にパフォーマンスに問題がなければ心配はありません。

+0

@DaveSchweisguthありがとうございました。私のコードをモデルで乾かすために何ができるか教えてください。ここではひらがなのモデルである: 'クラスひらがなが

+0

質問に追加する必要があります。 –

+0

はい私は新しいです。モデルとインデックスビュー 'with_bigletter'と' select'でプロセス全体を見せてください。私は何ができるのか分からない。私は今日何か新しいことを学びたいので教えてください。よろしく。 –

関連する問題