jquery – 根据按下的链接显示特定类别Ruby on Rails

我有一个博客,在同一页面上呈现每个类别及其各自的sub_categories. (索引视图)我有一个导航部分,我想利用它来根据按下的链接只渲染特定的子类别的帖子.我不知道单独使用 ruby是否可行,所以我认为 JQuery可能就是这样.

blog_categories index.html.erb:

<%= link_to "BLOG",blog_path %> <!-- Will render latest posts. -->

<li role="presentation" class="dropdown">
  <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
    NEWS <span class="caret"></span>
  </a>
  <ul class="dropdown-menu">
    <li role="presentation"><a href="#">All News</a></li> <!-- Will render all subcategories that belong to the "news" category -->
    <li role="presentation"><a href="#">Good News</a></li>
    <li role="presentation"><a href="#">Bad News</a></li>
  </ul>
</li>

<li role="presentation" class="dropdown">
  <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
    REVIEWS <span class="caret"></span>
  </a>
  <ul class="dropdown-menu">
    <li role="presentation"><a href="#">All Reviews</a></li>
    <li role="presentation"><a href="#">Software</a></li>
    <li role="presentation"><a href="#">Hardware</a></li>
  </ul>
</li>

<% BlogCategory.top_level.find_each do |category| %>
  <% category.sub_categories.find_each do |sub_category| %>
    <% sub_category.posts.find_each do |post| %>

      <%= link_to post do %>
        ...
      <% end %>

    <% end %>
  <% end %>
<% end %>

blog_categories_controller:

def index
  @category = BlogCategory.find_by_id(params[:id])
  unless @category.nil? # Allows for categories to have nothing in them,eliminating the NoMethodError
    @sub_category = @category.sub_categories.first
    @posts = @subcategory.posts
  end
end


private

  def cat_params
    params.require(:blog_category).permit(:name,:parent_id,:sub_category)
  end

我的sub_categories通过blog_categories表中的parent_id列通过自引用关系与主要类别相关.

我已经阅读了一些有关guides.rubyonrails.org上的活动记录查询的信息,并看到了一些关于Client.where(“orders_count =?”,params [:orders])等条件的问题可以使用吗?

如果这不是使用HTML下拉菜单迭代BlogCategory的正确方法,我很想知道最好的方法来处理这个问题,谢谢!

解决方法

查看您的代码和问题,您似乎希望在索引页面显示所有类别,子类别和每个子类别中的帖子.我假设您的帖子数量有限,否则您可能希望将其限制为每个子类别的n(5?)个帖子数量.如果是这样,您可以拥有以下控制器:
def index
  @categories = BlogCategory.top_level.includes(sub_categories: :posts)
end

然后在视图中,您可以轻松访问@categories,@ category [i] .sub_categories和@categories [i] .sub_categories [j] .posts,而不会从视图中触发任何额外的查询.有点像:

<% @categories.each do |category| %>
  <li role="presentation" class="dropdown">
  <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
    <%= category.name %> <span class="caret"></span>
  </a>
  <ul class="dropdown-menu">
    <% category.sub_categories.each do |sub_category| %>
      <li role="presentation"><a href="#"><%= sub_category.name %></a></li>
      <!-- And if you want to show the posts here,then loop through sub_category.posts -->
    <% end %>
  </ul>
  </li>
<% end %>

您可以使用jquery显示和隐藏相关的子类别和帖子,具体取决于用户点击的内容.这是一个例子:
http://api.jquery.com/show/

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...