【问题标题】:Rails iteration over arrays and hashesRails 对数组和哈希的迭代
【发布时间】:2019-04-06 19:46:54
【问题描述】:

我正在尝试迭代我认为是 rails 中的哈希。我使用 deep_pluck gem 来获取模型的值,包括来自关联的一些值。像这样:

    Continent.deep_pluck(:link_name, :name, 'countries' => [:link_name, :name])

返回:

   [{"link_name"=>"europe", "name"=>"europe", "countries"=>[{"link_name"=>"countryname", "name"=>"countryname"}]}]

我正在尝试这样迭代:

             <% results.each do |continent| %>
              <% continent.each do |link_name, name, countries| %>
                <%= link_name %>
              <% end %>

            <% end %>

作为回报:

                link_name
                name
                countries

我尝试了很多不同的方式和方法,但我仍然无法获得所需的输出,即打印出 :link_name 和 :name 的值以及国家的另一个对象以再次对其名称进行迭代等.

我正在尝试构建一个导航菜单,其中包含每个大陆的列表以及该大陆国家/地区的子菜单。我使用 pluck 是因为我只想要数据库的名称和链接名称。

非常感谢!

【问题讨论】:

    标签: ruby-on-rails ruby loops iteration


    【解决方案1】:

    当您遍历哈希时,您可以访问键和值。

    如果您查看打印出来的内容,您将获得每个哈希的键。如果您将参数设置为实际值,您的输出可能会更有意义。

    <% results.each do |continent| %>
      <% continent.each do |key, value| %>
        <%= key %>
      <% end %>
    <% end %>
    

    这应该足以让您走得更远。要实现您想要的,您需要检查每个 key 并根据密钥对 value 执行某些操作。

    【讨论】:

    • 非常感谢,我试过了,结果我必须使用大陆[“link_name”]
    【解决方案2】:

    也许可以试试:

    [{"link_name"=>"europe", "name"=>"europe", "countries"=>[{"link_name"=>"countryname", "name"=>"countryname"}]}].each do |continent|
      continent.each do |k,v|
        case k
        when 'countries'
          v.each do |country|
            country.each do |k,v| 
              puts "  - #{v}"
            end
          end
        else
          puts v
        end
      end
    end
    

    (当然,您需要添加 erb 标记。“puts”只是为了在控制台中运行它。)

    这会给你:

    europe
    europe
      - countryname
      - countryname
    

    【讨论】:

      【解决方案3】:

      非常感谢您的建议,我终于设法使它像这样工作:

            <% results.each do |continent| %>
                   <li class="has_children"><a href="/continents/<%= continent["link_name"] %>"><%= continent["name"] %></a>
                    <ul class="sub_menu">
                      <% continent["countries"].each do |country| %>
                  <li><a href="/countries/<%= country["link_name"] %>"><%= country["name"] %></a>
                      <% end %>
      
      
                    </ul>
      
                   </li>
      
                  <% end %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-15
        • 1970-01-01
        • 2013-04-30
        • 2015-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多