基于哈希

时间:2015-10-12 07:23:43

标签: ruby-on-rails ruby hash

假设我有一组哈希,例如:

@demo = [{"category"=>"history", "title"=>"world war 2"}, {"category"=>"history", "title"=>"world war 1"}, {"category"=>"chemistry","title"=>"chemistry experiments" }]

和这样的侧边栏:

<ul class="page-sidebar-menu">
    <li class="start ">
     <i class="fa fa-star-o"></i>
        <span class="title">Example</span>
    </li>
<ul>

1)如何根据哈希的关键“类别”显示我的侧边栏,而不重复?

2)我在哈希中有其他数据,我如何创建视图,这样当我点击侧边栏中的值时,例如“历史记录”,它将链接到显示所有数据的页面“历史”类别?

2 个答案:

答案 0 :(得分:0)

我认为你是这样做的。我刚刚采用了一些示例HTML代码来演示您可以使用自己的代码。

1)首先创建一个包含当前页面链接的哈希,如

@demo = [{"category"=>"history", "title"=>"world war 2", :path => histories_path}]

2)用于选择uniq类别

@uniq_demo  = @demo.uniq! {|e| e["category"] }

3)之后,您可以通过完整哈希迭代

<ul class="page-sidebar-menu">
  <% @uniq_demo.each do |menu| %> 
    <% if menu["category"].present? %>
     <li class="start ">
       <i class="fa fa-star-o"></i>
        <a href='<%= menu["path"]>'><span class='<%= menu["title"]%>'><%= menu["category"]%></span></a>
     </li>
    <% end %>
  <% end %>
</ul>

答案 1 :(得分:0)

  

如何根据键&#34;类别&#34;显示我的侧边栏。哈希,不重复

定义此功能时必须更清楚。

你有两组history类别对象(顺便提一下,你有一组哈希值)......

@demo = [{"category"=>"history", "title"=>"world war 2"}, {"category"=>"history", "title"=>"world war 1"}]

...那么你想要展示哪一个?

数组的问题是它们应该是constructs of unsorted (not unordered) data -

  

数组是有序的,任何对象的整数索引集合。

这意味着您无法通过&#34;调用&#34;来加载数组。它 - 它们是愚蠢的,并不是要知道整个阵列中有哪些数据。

<强> Ruby: select a hash from inside an array

可以执行&#34;发现&#34;数组上的功能,就像模型中的集合一样:

category = @demo.find {|x| x['category'] == 'category' } #=> [{"category"=>"history", "title"=>"world war 2"}, {"category"=>"history", "title"=>"world war 1"}]

这将返回另一个数组,您必须循环,或更具体关于调用。

-

所以你最终得到这样的东西:

<% history = @demo.find { |x| x['category'] == "history" } 
<ul class="page-sidebar-menu">
    <li class="start ">
     <i class="fa fa-star-o"></i>
        <%= content_tag :span, history.first.title, class: "title" %> #-> World War 2 (remember, Arrays are unsorted)
    </li>
<ul>

如果您只想循环使用它,您可以执行以下操作:

<ul class="page-sidebar-menu">
    <% categories = @demo.uniq { |s| s.category }
    <% categories.each do |category| %>
        <li class="start ">
            <%= link_to category.title, category %>
        </li>
    <% end %>
<ul>
  

我在哈希中有其他数据,我如何创建视图,以便当我点击侧边栏中的值时,例如&#34; history&#34;,它将链接到显示所有内容的页面具有类别&#34;历史&#34;

的数据

这是我的朋友,是Rails的精髓。

如果你提出这样的问题,你需要阅读Rails如何运作的核心。

以下是我使用的代码,我将让您解决这个问题:

#config/routes.rb
resources :categories #-> url.com/categories/:id

#app/controllers/categories_controller.rb
class CategoriesController < ApplicationController
   def show
      @category = Category.find params[:id]
   end
end

#app/views/categories/show.html.erb
<%= @category.title %>
....