2016-03-18 19 views
1

我會盡量做到非常明確,因爲我一直試圖做幾天的「特殊」迭代。 (A,E,I,O,U)和下降(KA,SA,TA ... KE,SE,TE ...(I),我創建了名爲平假名的名片,O,U =>相似))。如何使用特定的屬性值迭代ActiveRecord模型對象?

我做一個迭代與.each用平假名實例列出它們的索引頁:

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

的看法是

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

我要重複上hiragana.bigletter方法。

<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 一個顯示在垂直列的所有平假名,與bigletter ê顯示器上的另一垂直柱等所有平假名。

有人告訴我關於.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 

謝謝你的幫忙。

回答

1

我想這是你想要的東西:

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

,然後將結果的Hiragana.with_bigletter('a')等等到您的控制器中的模板變量或變量。

用ActiveRecord查詢所有Hiraganas的性能可能會更好,並且在我的第一個答案中有with_bigletterselect,但除非實際上有性能問題,否則我不會擔心。

+0

謝謝@DaveSchweisguth的幫助。請你能指導我怎樣才能在模型中幹掉我的代碼。下面是平假名模型:'類平假名

+0

您應該將其添加到您的問題中。 –

+0

是的,我是新的。請你可以在模型和索引視圖'with_bigletter'和'select'中向我展示整個過程。我看不到我能做什麼。你能告訴我,因爲我今天想學點新東西。問候。 –

相關問題