0

我有搜索 2 个模型的搜索控制器 - 帖子和类别。搜索有效,但是我无法在视图中正确显示结果 - 我无法显示类别名称。

在这一点上,我感到非常困惑和沮丧,希望能得到一些帮助!我很确定(99% 确定)问题出在某处的视图中,因为我可以通过渲染检查来显示结果。

搜索控制器.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>

我可以获得与要显示的搜索匹配的帖子,但我无法显示类别。我怎样才能做到这一点?任何帮助都非常感谢!谢谢你。

4

2 回答 2

0

答案(我包括了我为使其工作而更改的所有内容+一些我没有更改但必须存在的文件),或者如何对多个模型进行简单搜索

搜索控制器.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 %>
...

这现在有效。可以轻松地将新模型添加到搜索中。搜索所需的唯一其他内容是输入字段。

于 2013-10-01T20:46:52.803 回答
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 %>
于 2013-09-30T17:17:38.800 回答