2013-09-30 40 views
0

我有搜索控制器,搜索2個模型 - 帖子和類別。搜索有效,但是我無法正確顯示結果 - 我無法獲取類別名稱顯示。Ruby on Rails - 如何組合顯示在視圖中搜索結果

我很困惑和沮喪在這一點上,希望找到一些幫助! 我很肯定(99%肯定)問題出在某處,因爲我可以通過渲染檢查來顯示結果。

SearchController.rb

class SearchController < ApplicationController 
    def index 
    @posts = Post.search(params[:search]) 
    @categories = Category.search(params[:search]) 

    # combine the results 
    @results = @posts + @categories 
    @results.uniq # may be necessary to remove duplicates 
    end 
end 

index.html.erb(視圖/搜索)

<%= render 'posts/posts', :posts => @posts %> 

_posts.html.erb(查看/帖)

<h1>Listing posts</h1> 

<table> 
    <tr> 
    <th>Name</th> 
    <th>Category</th> 
    <th>Description</th> 
    <th>Flag</th> 
    </tr> 

    <% if posts %> 
    <% posts.each do |post| %> 
    <tr> 
     <td><%= post.name %></td> 
     <td><%= post.category.name %></td> 
     <td><%= post.description %></td> 
     <td><%= post.flag %></td> 
    </tr> 
    <% end %> 
    <% else %> 
    <tr><td>No posts</td></tr> 
    <% end %> 
</table> 

我可以獲取符合搜索顯示的帖子,但我無法顯示類別。我怎樣才能做到這一點?任何幫助高度讚賞!謝謝。

+0

我已經解決了我的問題。我不太明白它爲什麼還能工作。但本質上它正在尋找我沒有的文件/類別/ _category和/ posts/_post。這不是明顯的,紅寶石!不明顯。我刪除了Controller中除第一行之外的所有內容。我沒有修改_posts.html。erb。我會在後面的答案中發佈完整的代碼。如果使用太陽黑子,我也喜歡kobaltz的解決方案。 – Chemist

回答

0

如果您使用的是像sunspot solr搜索後臺,那麼你將能夠在搜索結合起來像

@search = Sunspot.search [User, Company] do 
    fulltext params[:search] 
end 
@results = @search.results 

,然後返回必要的值。在這個例子中,它顯示在那裏你可以檢索類的動作(CONTROLLER_NAME)的,這取決於可能無法正常工作控制器結果在返回。

 <% @results.each do |result| %> 
      <% case result.class.to_s %> 
       <% when "Company" %> 
        <li><%= "Company: #{result.name}" %></li> 
       <% when "User" %> 
        <li><%= "User: #{result.username}" %></li> 
      <% end %> 
     <% end %> 
+0

我沒有使用任何後端搜索程序。我真的很想解決這個問題,而不訴諸太陽黑子或任何其他搜索程序,但如果我不能,我將不得不嘗試這一點。謝謝。 – Chemist

+0

我剛剛在另一個應用程序上試過這個,我沒有從@ search.results中得到任何東西,這對你有用嗎? – Chemist

0

答案(包括我所有我改變的事情使它工作+幾個文件,我並沒有改變,但有在那裏),或如何使簡單的搜索多個型號

SearchController.rb

class SearchController < ApplicationController 
    def index 
    @posts = Post.search(params[:search]) 
    end 
end 

post.rb

class Post < ActiveRecord::Base 
    attr_accessible :category_id :name :description :flag 

    belongs_to :category 

    def self.search(search) 
    if search 
     find(:all, :joins => :category, :conditions => ['posts.equipment LIKE ? OR posts.description LIKE ? or categories.name like ?', "%#{search}%", "%#{search}%", "%#{search}%"]) 
    else 
     find(:all) 
    end 
    end 

搜索/ index.html.erb

<%= render 'posts/posts', :posts => @posts %> 

我加了2個文件_post.html.erb和_category.html.erb。它們是相似的,這是_post.html.erb:。

post: <%= post.name %> 

(這可能沒有必要在某些情況下,或者對於某些型號,我可以在其觀點尋找第三個模型沒有這個文件,但是第三模型沒有像_posts.html.erb文件)。 最後,_posts.html.erb仍然是相同的:

... 
<% if posts %> 
    <% posts.each do |post| %> 
    <tr> 
    <td><%= post.name %></td> 
    <td><%= post.category.name %></td> 
    <td><%= post.description %></td> 
    <td><%= post.flag %></td> 
    </tr> 
    <% end %> 
<% else %> 
    <tr><td>No posts</td></tr> 
<% end %> 
... 

這就是現在的工作。可以輕鬆地將新模型添加到搜索中。搜索所需的唯一其他東西是輸入字段。