我正在尝试迭代我认为是Rails的哈希值。我使用deep_pluck gem来获取Model的值,其中包括来自关联的一些值。像这样:
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是因为我只想要数据库的名称和link_names。
非常感谢您!
答案 0 :(得分:2)
遍历哈希时,您可以访问键和值。
如果您查看打印出来的内容,那么您将获取每个哈希的键。如果将参数设置为实际值,则输出可能更有意义。
<% results.each do |continent| %>
<% continent.each do |key, value| %>
<%= key %>
<% end %>
<% end %>
这应该足以使您走得更远。要实现所需的功能,您需要检查每个key
并根据密钥是什么对value
进行操作。
答案 1 :(得分:1)
也许尝试如下操作:
[{"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
答案 2 :(得分:0)
非常感谢您的建议,我终于设法使它像这样工作:
<% 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 %>