2012-07-25 127 views
0

我试图隐藏我的搜索结果,直到搜索发生之后。在我从主页点击搜索页面的那一刻,该页面显示搜索框,同时还显示了表格中的所有数据库。我只想显示搜索选项,然后搜索按钮,然后根据搜索结果显示正确的表格。Ruby on Rails:在搜索后在页面上显示结果

这里是我的搜索视图:

<h1>Search</h1> 

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

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

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

Role : 
<%= select(@projects, :role, Project.all.map {|p| [p.role]}.uniq, :prompt => "-Any-", :selected => params[:role]) %></br> 

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

Business Division : 

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

Project Owner : 
<%= select(@projects, :project_owner, Project.all.map {|p| [p.project_owner]}.uniq, :prompt => "-Any-", :selected => params[:project_owner]) %></br> 

Exception PM 
<%= select(@projects, :exception_pm, Project.all.map {|p| [p.exception_pm]}.uniq, :prompt => "-Any-", :selected => params[:exception_pm]) %></br> 


Start Date : 

<%= text_field_tag("start_date") %></br> 


End Date : 

<%= text_field_tag("end_date") %></br> 


Status : 

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

Keywords : 

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

<%= submit_tag "Search", name: nil %> 

<% end %> 


<% if @search %> 
    <h3><%[email protected]_search.total_entries%> results</h3> 
<% end %> 

<% if @search %> 
<table class = "pretty"> 
<table border="1"> 
    <tr> 
    <th><%= sortable "project_name", "Project name" %> </th> 
    <th><%= sortable "client", "Client" %></th> 
    <th>Exception pm</th> 
    <th>Project owner</th> 
    <th>Tech</th> 
    <th>Role</th> 
    <th>Industry</th> 
    <th>Financials</th> 
    <th>Business div</th> 
    <th>Status</th> 
    <th>Start date</th> 
    <th>End date</th> 
<% if false %> 
    <th>Entry date</th> 
    <th>Edited date</th> 
    <th>Summary</th> 
    <th>Lessons learned</tStackh> 
    <th>Customer benifits</th> 
    <th>Keywords</th> 
    <!th></th> 
    <!th></th> 
    <!th></th> 
<% end %> 
    </tr> 

<%# end %> 

<% @project_search.each do |t| %> 
    <tr> 
    <td><%= t.project_name %></td> 
    <td><%= t.client %></td> 
    <td><%= t.exception_pm %></td> 
    <td><%= t.project_owner %></td> 
    <td><%= t.tech %></td> 
    <td><%= t.role %></td> 
    <td><%= t.industry %></td> 
    <td><%= t.financials %></td> 
    <td><%= t.business_div %></td> 
    <td><%= t.status %></td> 
    <td><%= l t.start_date %></td> 
    <td><%= l t.end_date %></td> 
<% if false %> 
    <td><%= t.entry_date %></td> 
    <td><%= t.edited_date %></td> 
    <td><%= t.summary %></td> 
    <td><%= t.lessons_learned %></td> 
    <td><%= t.customer_benifits %></td> 
    <td><%= t.keywords %></td> 
<% end %> 
    <!td><%#= link_to 'Show', project %></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> 

Results per page: <%= select_tag :per_page, options_for_select([10,20,50], params[:per_page].to_i), :onchange => "if(this.value){window.location='?per_page='+this.value;}" %> 

<br /> 
<%= 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) %> 


<%= button_to "Search Again?", search_path, :method => "get" %> 

<%# end %> 
<%= button_to "Home", projects_path, :method => "get" %> 

下面是搜索行动:

def search 


@search = params[:client], params[:industry], params[:role], params[:tech], params[:business_div], params[:project_owner], params[:exception_pm], params[:status], params[:start_date], params[:end_date], params[:keywords] 

@project_search = Project.search(@search) 

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

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

end 

,这里是我的模型。

class Project < ActiveRecord::Base 
    attr_accessible :business_div, :client, :customer_benifits, :edited_date, :end_date, :entry_date, :exception_pm, :financials, :industry, :keywords, :lessons_learned, :project_name, :project_owner, :role, :start_date, :status, :summary, :tech 

validates_presence_of :business_div, :client, :customer_benifits, :end_date, :exception_pm, :financials, :industry, :keywords, :lessons_learned, :project_name, :project_owner, :role, :start_date, :status, :summary, :tech 





def self.search(search_client, search_industry, search_role, search_tech, search_business_div, search_project_owner, search_exception_pm, search_status, search_start_date, search_end_date, search_keywords) 
    return scoped unless search_client.present? || search_industry.present? || search_role.present? || search_tech.present? || search_business_div.present? || search_project_owner.present? || search_exception_pm.present? || search_status.present? || search_start_date.present? || search_end_date.present? || search_keywords.present? 

if search_start_date != "" 
search_start_date = Date.parse(search_start_date).strftime("%Y-%m-%d") 
end 
if search_end_date != "" 
search_end_date = Date.parse(search_end_date).strftime("%Y-%m-%d") 
end 



    where(['client LIKE ? AND industry LIKE ? AND role LIKE ? AND tech LIKE ? AND business_div LIKE ? AND project_owner LIKE ? AND exception_pm LIKE ? AND status LIKE ? AND start_date LIKE ? AND end_date LIKE ? AND keywords LIKE ?', "%#{search_client}%", "%#{search_industry}%" , "%#{search_role}%" , "%#{search_tech}%" , "%#{search_business_div}%" , "%#{search_project_owner}%" , "%#{search_exception_pm}%" , "%#{search_status}%", "%#{search_start_date}%", "%#{search_end_date}%","%#{search_keywords}%"]) 



end 


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

end 

希望你能看到我试过的。我得到错误wrong number of arguments (1 for 11),因为我没有分割参数。但是当我使用*@search时,我得到了大量的错误。

我在控制器原来的代码看起来像在此之前我去约试图隐藏表:

@project_search = Project.search(params[:client], params[:industry], params[:role], params[:tech], params[:business_div], params[:project_owner], params[:exception_pm], params[:status], params[:start_date], params[:end_date], params[:keywords]).order(sort_column + ' ' + sort_direction).paginated_for_index(per_page, page

+0

什么是代码的结果是你”目前正在运行?错误?意外的输出? – 2012-07-25 13:01:23

+0

错误的参数数量(1代表11) – Jazz 2012-07-25 13:02:31

+0

为什么不使用'form_for'将所有这些参数放入只有一个使用子哈希的散列? – YuriAlbuquerque 2012-07-25 13:16:42

回答

2

它传递给.search当你需要图示的@search PARAMS告诉红宝石扩大你的论点分隔参数数组传递给Project.search

@project_search = Project.search(*@search) 

Information on using splat

编辑(回答您的后续问题)

测试与

<% if @search %> 

是不够的,因为它,即使它只是将永远有一个计算结果为true值, []["", "", "", "", "", "", "", "", "", "", ""]。正确检查此问题的一种方法是创建一个新的布尔实例变量,如果搜索筛选器中的所有字段都为空,则为true

# put this after you set @search in your action 
@search_performed = [email protected]! { |c| c.blank? }.empty? 

现在测试@search_performed在你看来与

<% if @search_performed %> 
+0

我不明白。为什么要用'*'来代替参数中的'params'?你可以举一个“搜索”功能的例子吗? – Dougui 2012-07-25 13:23:44

+0

OP表示错误是“错误的参数数目(1表示11)”,这意味着当'search'函数期待** 11 **时他传递1个参数。 '@ search'包含一个他传递给'Project.search'的参数数组。他打算做的是将'@ search'数组中的11个元素作为独立参数传递。这就是'*'进来的地方。 – deefour 2012-07-25 13:27:46

+0

当我使用* @搜索时会发生各种错误。我将编辑我的问题,以便更好地了解我想要做的事情。感谢您的帮助 – Jazz 2012-07-25 14:04:08

0

你是存储阵列中@search和u必须使用*操作

@project_search = Project.search(*@search) 
+0

尝试您的建议时,我收到了很多不同的错误。我编辑了我的OP,以便更好地了解我想要做什么,以及出了什么问题。谢谢 – Jazz 2012-07-25 14:33:33