2015-12-01 2 views
0

Я создаю сайт, например www.reddit.com. У меня есть сообщения, которые могут принадлежать восьми категориям. Когда пользователь нажимает на определенную категорию, сообщения, относящиеся к этой категории, будут отображаться. Я смог создать функциональность, позволяющую пользователю делать это, и все работает нормально. Затем я сделал панель поиска, используя драгоценный камень ransack, и я получил функциональность поиска, которая работает нормально. Но теперь я больше не могу нажимать на категории, чтобы появляться соответствующие сообщения. Я не уверен, как я это испортил, и я потратил немало времени, пытаясь понять это. Если кто-нибудь может указать на проблему, мы будем очень благодарны, спасибо!Невозможно загрузить сообщения из определенной категории

Сообщений Контроллер:

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 

Я чувствую, что он автоматически выполняет код в блоке еще, но я не знаю, почему, потому что есть 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 %> 

Я уверен, что это не корр ЭСТ способ передать идентификатор категории, но я получил это работает так:

<%= link_to 'Gadgets', category_posts_path(1) %> 
<%= link_to 'Sports', category_posts_path(2) %> 
<%= link_to 'Gaming', category_posts_path(3) %> 
<%= link_to 'Pics', category_posts_path(4) %> 
<%= link_to 'World News', category_posts_path(5) %> 
<%= link_to 'Videos', category_posts_path(6) %> 
<%= link_to 'Aww', category_posts_path(7) %> 
<%= link_to 'Music', category_posts_path(8) %> 

сообщений вложен по категориям:

resources :categories do 
    resources :posts 
    end 
+0

Вы дважды проверяли, является ли '@ search_results' пустым, когда' params [: q] 'nil? – Yang

+0

Спасибо, что ответили Ян. Вы дали мне идею установить @search_results на ноль, и я получил его на работу. Спасибо! – Banner

ответ

0

Я был в состоянии решить эту проблему, установив «@search_results» всухую в контроллер:

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 @search_results != nil %> 

Надеюсь, это поможет кому-то с подобной проблемой.

Смежные вопросы