假设我有一组哈希,例如:
@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)我在哈希中有其他数据,我如何创建视图,这样当我点击侧边栏中的值时,例如“历史记录”,它将链接到显示所有数据的页面“历史”类别?
答案 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 %>
....