2016-03-18 2 views
1

Ich werde versuchen, sehr explizit zu sein, weil ich versuche, eine "spezielle" Iteration für mehrere Tage zu machen.Wie wird über ActiveRecord-Modellobjekte mit einem bestimmten Wert eines Attributs iteriert?

Ich erstellte Karten, die Hiragana heißen und durch einen Buchstaben (A, E, I, O, U) definiert sind und in (KA, SA, TA ... KE, SE, TE ... (I , O, U => ähnlich)).

ich eine Iteration mit .each mit Hiragana Instanz sie auf der Indexseite zur Liste:

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

Der Blick

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

ist ich auf dem hiragana.bigletter Verfahren iterieren wollen.

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

, weil ich alle Hiraganas mit dem bigletter A Anzeige auf einer vertikalen Spalte haben wollen, alle Hiraganas mit dem bigletter E Anzeige auf einer anderen vertikalen Spalte und so weiter.

Einige Leute erzählten mir von .select, aber ich weiß nicht, wo ich es hinstellen soll. In dem Hiragana-Modell?

Bitte können Sie mir helfen, was ich tun kann, um meinen Code im Modell zu trocknen. Hier ist das Hiragana Modell:

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 

Vielen Dank für Ihre Hilfe.

Antwort

1

Ich denke, das ist, was Sie wollen:

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

Es ist vorzuziehen Code in Vorlagen zu minimieren, so wäre es besser, ein Verfahren zum Modell

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

und weist das Ergebnis hinzufügen von Hiragana.with_bigletter('a') und so weiter zu einer Vorlagenvariable oder Variablen in Ihrem Controller.

Es könnte besser für die Leistung sein, alle Hiraganas mit ActiveRecord abzufragen und with_bigletter tun select wie in meiner ersten Antwort, aber ich würde mir keine Sorgen machen, es sei denn, Sie hatten tatsächlich ein Leistungsproblem.

+0

Danke @DaveSchweisguth für Ihre Hilfe. Könnten Sie mir bitte sagen, was ich tun kann, um meinen Code im Modell zu trocknen? Hier ist die Hiragana-Modell: 'Klasse Hiragana

+0

Sie sollten das zu Ihrer Frage hinzufügen. –

+0

Ja ich bin neu. Bitte können Sie mir den gesamten Prozess in der Modell- und Indexansicht 'with_bigletter' und' select' zeigen. Ich sehe nicht, was ich tun kann. Kannst du es mir sagen, weil ich heute etwas Neues lernen will? Grüße. –