2016-03-18 16 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'中向我展示整个过程。我看不到我能做什么。你能告诉我,因为我今天想学点新东西。问候。 –

相关问题