我有搜索控制器搜索2个模型 - 帖子和类别。搜索工作正常,但是我无法在View中正确显示结果 - 我无法显示类别名称。
此时我非常困惑和沮丧,希望能找到一些帮助! 我非常肯定(99%肯定)问题出在View的某个地方,因为我可以通过渲染检查显示结果。
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(views / search)
<%= 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 :(得分: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 %>
答案 1 :(得分: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 %>
...
现在可以使用了。可以轻松地为搜索添加新模型。搜索所需的唯一其他内容是输入字段。