【问题标题】:To iterate by block in rails在rails中按块迭代
【发布时间】:2016-06-21 17:11:20
【问题描述】:

我使用 Ruby on Rails 并创建了 40 多个平假名抽认卡。在我的索引视图中,我进行了这样的迭代。 一些平假名卡有不同的我想创建不同的列来承载不同的颜色卡。

我想迭代字母 A = 绿色、E = 红色、I = 粉红色等

enter image description here

我只会这样做

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

你知道如何只选择几个元素进行迭代吗?我看到了一些 tutos 但我尝试.select

这里是渲染抽认卡代码

<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 %>
        <!-- PARAMETRER LE RESPONSIVE BOOTSTRAP -->
        <!-- <div class="col-sm- col-xs-4 col-md-3"> -->
          <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 -->
          <span class="idea popover-word" data-content="<p class='text-center'><b>l'image est bientôt prête !</b><%= hiragana.upload %></p>">
            <i class="fa fa-lightbulb-o fa-lg"></i>
          </span>
          <!-- <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>

感谢您的回答

【问题讨论】:

    标签: ruby-on-rails ruby iteration each


    【解决方案1】:

    你想要哪个?您要选择的逻辑是什么?如果你只是想要前 3 个,你可以说

     @hiriganas = Hirigana.first(3)
    

    如果您有条件想通过 select 选择它们是一个不错的选择。

     @hiriganas = @hiriganas.select{ |hir|  # criteria for selection }
    

    【讨论】:

    • 谢谢。我尝试了这个,但我只是想在具有相同颜色的垂直列卡中列出。一列绿色,一列红色……
    • 颜色是桌子上的一列吗?
    • 如果你有一个名为 color 的列,试试这个(在变量前面添加一个 @): green_hiriganas = Hirigana.where(color: 'green') red_hiriganas = Hirigana.where(color: 'red ') # 等然后在视图中您想要列出的适当位置使用这些变量
    • 没有。我只有一个生成器,它通过我输入的字母 hiragana-&lt;%=hiragana.bigletter.downcase.last%&gt; 显示颜色,我们调用了 Css 类。
    • 你把这封信保存到数据库了吗?
    【解决方案2】:

    这取决于:如果您在平假名模型中保存了颜色,那么您只需要:

    greenhiriganas = Hirigana.where(color: "green")
    

    如果您只知道哪些字母有哪些颜色,那么您需要为每个部分编写一个包含所有名称的数组

    #if for example A, Ka and Shi are green
    green = [:a, :ka, :shi]
    #then select via include?-method
    greenhiriganas = Hirigana.select{ |hiri| green.include?(hiri.name) }
    

    【讨论】:

    • William 在我的模型中实际上没有保存颜色,但是在我的控制器中,当我创建带有字母 A、E、I、O、U 的卡片时。我在第二部分中将上面的代码放在哪里代码(直接在我看来)?
    猜你喜欢
    • 2014-07-19
    • 2012-02-17
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多