Ruby on rails 无法从特定类别加载帖子

Ruby on rails 无法从特定类别加载帖子,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,我正在建立一个类似www.reddit.com的网站。我的帖子可以分为八类。当用户单击某个类别时,将显示属于该类别的帖子。我能够创建允许用户这样做的功能,并且一切正常。然后我用搜救宝石做了一个搜索栏,搜索功能运行得很好。但是现在我不能再点击分类来显示合适的帖子了。我不知道我是怎么搞砸的,我花了相当多的时间试图弄明白。如果有人能指出问题,我们将不胜感激,谢谢 主计长员额: def index @search_posts = Post.search(params[:q]) @se

我正在建立一个类似www.reddit.com的网站。我的帖子可以分为八类。当用户单击某个类别时,将显示属于该类别的帖子。我能够创建允许用户这样做的功能,并且一切正常。然后我用搜救宝石做了一个搜索栏,搜索功能运行得很好。但是现在我不能再点击分类来显示合适的帖子了。我不知道我是怎么搞砸的,我花了相当多的时间试图弄明白。如果有人能指出问题,我们将不胜感激,谢谢

主计长员额:

  def index
    @search_posts = Post.search(params[:q])
    @search_results = @search_posts.result.paginate(:page => params[:page], :per_page => 10)

    if params[:category_id]
      @category = Category.find params[:category_id]
      @posts = @category.posts.paginate(:page => params[:page], :per_page => 10)
    else
      @posts = Post.paginate(:page => params[:page], :per_page => 10)
    end

  end
if params[:category_id]
  @search_results = nil
  @category = Category.find(params[:category_id])
  @posts = @category.posts.paginate(:page => params[:page], :per_page => 10)
else
  @posts = Post.paginate(:page => params[:page], :per_page => 10)
end
我觉得它会自动执行else块中的代码,但我不确定为什么,因为当我检查日志时,会出现一个params[:category_id]:

Started GET "/categories/7/posts" for ::1 at 2015-12-01 00:00:11 -0500
Processing by PostsController#index as HTML
  Parameters: {"category_id"=>"7"}
  Category Load (0.2ms)  SELECT  "categories".* FROM "categories" WHERE "categories"."id" = ? LIMIT 1  [["id", 7]]
   (0.3ms)  SELECT COUNT(*) FROM "posts"
  Post Load (0.3ms)  SELECT  "posts".* FROM "posts" LIMIT 10 OFFSET 0
帖子#索引视图:

<%= search_form_for @search_posts do |f| %>
  <%= f.text_field :title_cont %>
  <%= f.submit "Search" %>
<% end %>

<% if @search_results.any? %>

  <% @search_results.each do |post| %>

    <div id="each_post">
      <p id="post_title"><%= link_to post.title, strip_url(post.url) %></p>
      <p>Submitted <%= time_ago_in_words(post.created_at) %> ago by <%= link_to post.user.name, user_path(post.user) %></p>
    </div>

  <% end %>

  <%= will_paginate @search_results %>

<% else %>

  <% @posts.each do |post| %>

      <div id="each_post">
        <p id="post_title"><%= link_to post.title, strip_url(post.url) %></p>
        <p>Submitted <%= time_ago_in_words(post.created_at) %> ago by <%= link_to post.user.name, user_path(post.user) %></p>
      </div>

  <% end %>

  <%= will_paginate @posts %>

<% end %>

我可以通过在控制器中将“@search_results”设置为nil来解决此问题:

  def index
    @search_posts = Post.search(params[:q])
    @search_results = @search_posts.result.paginate(:page => params[:page], :per_page => 10)

    if params[:category_id]
      @category = Category.find params[:category_id]
      @posts = @category.posts.paginate(:page => params[:page], :per_page => 10)
    else
      @posts = Post.paginate(:page => params[:page], :per_page => 10)
    end

  end
if params[:category_id]
  @search_results = nil
  @category = Category.find(params[:category_id])
  @posts = @category.posts.paginate(:page => params[:page], :per_page => 10)
else
  @posts = Post.paginate(:page => params[:page], :per_page => 10)
end
以及将if条件语句更改为:

<% if @search_results != nil %>


希望这能帮助有类似问题的人

参数[:q]
为零时,您是否仔细检查了
@search\u results
是否为空?谢谢您的回复。你让我把@search\u results设置为零,我让它工作了。非常感谢。