0

投稿とカテゴリの 2 つのモデルを検索する検索コントローラーがあります。検索は機能しますが、ビューに結果を正しく表示できません。カテゴリ名を表示できません。

私はこの時点で非常に混乱しており、イライラしています。助けを見つけたいと思っています! レンダーインスペクトで表示する結果を取得できるため、問題はビューのどこかにあると確信しています(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>

検索に一致する投稿を表示することはできますが、カテゴリを表示することはできません。これどうやってするの?どんな助けでも大歓迎です!! ありがとうございました。

4

2 に答える 2

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 %>

_post.html.erb と _category.html.erb の 2 つのファイルを追加しました。それらは似ています。これは _post.html.erb です:

post: <%= post.name %>

(これは、場合によって、または一部のモデルでは必要ない場合があります。ビューでこのファイルがなくても 3 番目のモデルを検索できます。ただし、3 番目のモデルには _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 に答える