0

ユーザーがさまざまなドロップダウンメニューを使用してさまざまなプロジェクトを検索できる検索ページがあります。一度に複数のフィールドを検索でき、すべてのフィールドに一致するプロジェクトが見つかった場合、検索によって何かが返されます。

プロジェクトコントローラでの検索アクションは次のとおりです。

def search

@search = params[:client], params[:industry], params[:tech], params[:keywords]

@project_search = Project.search(*@search).order(sort_column + ' ' + sort_direction).paginated_for_index(per_page, page)

@search_performed = !@search.reject! { |c| c.blank? }.empty? 

   @project = Project.new(params[:project])

@all_technols = Technol.all

@project_technol = @project.projecttechnols.build

respond_to do |format|
      format.html # search.html.erb
      format.json { render :json => @project }
    end

end

これが私の検索ビューです。

<%= stylesheet_link_tag "search" %>
<body>
<div id = "search_op">

<%= form_tag search_path, method: :get do %>


<div class="client">
Client : 
<%= select(@projects, :client, Project.order("client").map{|p| [p.client]}.uniq, :prompt => "-Any-", :selected => params[:client]) %></br>
</div>

<div class="industry">
Industry :
<%= select(@projects, :industry, Project.order("industry").map {|p| [p.industry]}.uniq, :prompt => "-Any-", :selected => params[:industry]) %></br>
</div>


<div class="tech">
Technologies :
<%#= select(@projects, :tech, Project.order("tech").map {|p| [p.tech]}.uniq, :prompt => "-Any-", :selected => params[:tech]) %></br>
<!/div>

<%= fields_for(@project_technol) do |ab| %>



<%= collection_select(:technols, :id, @all_technols, :id, :tech, {}, {:multiple => true } ) %>
</div>
<% end %>



<div class="keywords">
Keywords :

<%= text_field_tag :keywords, params[:keywords] %></br>
</div>




<div class="results">
Results per page: <%= select_tag :per_page, options_for_select([10,20,50], :selected=>params[:per_page]),  { :onchange => "this.form.submit();"}   %></br>


<%#Results per page: <%= select_tag :per_page, options_for_select([1,2,5], :selected=>params[:per_page]),  :onchange => "'#{request.query_string}&per_page=' + this.getValue()"  %></br>
</div>

<div class="buttons">
<div id="search_button">
<%= submit_tag "Search", name: nil, :class => "button" %>
</div>

<% end %>

<div class="home_button">
<%= button_to "Home", projects_path, :class => "button", :method => "get"  %>
</div>



<div id="reset_button">
<%= button_to "Reset Search", search_path, :class => "button", :method => "get" %>
</div>


</div>
</div> <%#search_op div%>







<div class ="menu"></div>



<div id ="section3">

<% if @project_search.total_entries > 0 %>
<% if @search_performed %>


<table id = "mytable">

  <tr>
    <th><%= sortable "project_name", "Project name" %> </th>
    <th><%= sortable "client", "Client" %></th>
    <th><%= sortable "tech", "Technologies" %></th>
    <th><%= sortable "industry", "Industry" %></th>

  </tr>



<% @project_search.each do |t| %>
  <tr>
    <td><%= link_to t.project_name, t %></td>
    <td><%= t.client %></td>

    <td><%= t.tech %></td>
    <td><%= t.industry %></td>

    <!td><%#= link_to 'Show', t %></td>
    <!td><%#= link_to 'Edit', edit_project_path(project) %></td>
    <!td><%#= link_to 'Destroy', project, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>
</table></br>

<div id ="total_results"><%=@project_search.total_entries%> results</div>
<%end %>



<% else %>
<h2> Sorry, there are no results matching your search. Please try again. </h2> 
<% end %>
<br />
<%# end %>


</div> <%# table div %>
</div> <%# section2 div %>



<% if @search_performed %>
<%= hidden_field_tag :direction, params[:direction] %>
<%= hidden_field_tag :sort, params[:sort] %>
<%= hidden_field_tag :per_page, params[:per_page] %>
<%= hidden_field_tag :page, params[:page] %>


<%= will_paginate (@project_search), :class => 'will' %>

<% end %>



</body>


</html> 

これが私のproject.rbです:

class Project < ActiveRecord::Base


has_many :projecttechnols
has_many :technols, :through => :projecttechnols


def self.search(search_client, search_industry,  search_tech, search_keywords) 
  return scoped unless search_client.present? || search_industry.present? || search_tech.present? || search_keywords.present?


where(['client LIKE ? AND industry LIKE ? AND tech LIKE ? keywords LIKE ?', 
      "%#{search_client}%", "%#{search_industry}%" , " "%#{search_tech}%"  
       "%#{search_keywords}%"
    ])



end


def self.paginated_for_index(projects_per_page, current_page)
    paginate(:per_page => projects_per_page, :page => current_page)
  end

end

デバッグを使用して、テクノロジドロップダウンで最初のテクノロジを検索すると、これが表示されます。

---
utf8: ✓
client: ''
industry: ''
technols:
  id:
  - ''
  - '1'

keywords: ''
per_page: '10'
action: search
controller: projects
page: 1

しかし、結果はありません。

プロジェクトに関連するすべてのテクノロジーを保持する新しいテーブルがあり、検索の設定、すべてのフィールドの検索、およびテクノロジーのいずれかが次のテクノロジーと一致するかどうかの検索に問題があります。技術テーブル。

誰かが私を正しい方向に向けることができますか?私はレールに慣れていないので、助けようとするときはこれを覚えておいてください。

前もって感謝します。

4

2 に答える 2

0

または、Sphinxなどの外部検索エンジンとthinking_sphinxgemを使用してみてください

于 2012-09-28T19:23:37.807 に答える
0

たぶん、 meta_searchのような検索ジェムを使用しようとするでしょうか?

于 2012-09-28T10:37:29.570 に答える