Ruby on Rails:日期搜索

问题描述:

快速的问题。我试图设置一个页面,使用开始日期,结束日期和关键字搜索数据库。如果我是为寻找2012-07-19,路径看起来像Ruby on Rails:日期搜索

搜索?UTF8 =%E2%9C%93 &项目%5Bstart_date%5D = 2012-07-19 &项目%5Bend_date%5D = & %5B状态%5D = &关键字=

所有结果都会显示。但是,当我搜索关键字时,搜索起作用。我看不到我要去哪里错了。

<h1>Search</h1> 




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

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

<div class="field"> 

<%= datepicker_input "project","start_date" %></br> 
</div> 

End Date : 

<%#= text_field_tag :end_date, params[:end_date] %></br> 
<%= datepicker_input "project","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 %> 

位指示:

def search 



@project_search = Project.search(params[:start_date], params[:end_date], params[:keywords]).order(sort_column + ' ' + sort_direction).paginated_for_index(per_page, page) 

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

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

end 

编辑:

当我用字符 “Q” 作为关键字,并开始日期为25-07-2012搜索时,SQL看起来像这

Parameters: {"utf8"=>"✓", "project"=>{"start_date"=>"25-07-2012", "end_date"=>""}, "status"=>"", "keywords"=>"q"} 
    Project Load (0.4ms) SELECT "projects".* FROM "projects" 
    (0.2ms) SELECT COUNT(*) FROM "projects" 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 '%q%') 

这似乎只搜索关键字“q”。当我删除了关键字和离开日期时,SQL是这样的:

Parameters: {"utf8"=>"✓", "project"=>{"start_date"=>"25-07-2012", "end_date"=>""}, "status"=>"", "keywords"=>""} 
    Project Load (0.3ms) SELECT "projects".* FROM "projects" 

预先感谢给予任何帮助!

我修复了我自己的问题。我改变了我的application.js文件和我的搜索视图。

的application.js:

jQuery(function(){ 
    jQuery('#start_date').val(""); 
    jQuery('#start_date').datepicker({dateFormat: 'dd-mm-yy'}); 
}); 

jQuery(function(){ 
    jQuery('#end_date').val(""); 
    jQuery('#end_date').datepicker({dateFormat: 'dd-mm-yy'}); 
}); 

搜索视图:

Start Date : 
<%= text_field_tag("start_date") %></br> 

End Date : 
<%= text_field_tag("end_date") %></br> 

我的应用程序现在开始和结束日期搜索。

如果你的代码是正确的,你还指望调用

Project.search(start_date, end_date, keywords) 

在您的例子中,PARAMS进来

project: { 
    start_date: "25-07-2012", 
    end_date: "" 
}, 
keywords: "q" 

但你打电话

Project.search(params[:start_date], params[:end_date], params[:keywords]) 

如果你的日志正确的你应该打电话

Project.search(params[:project][:start_date], params[:project][:end_date], params[:keywords]) 
+0

我试过你的建议,但我得到这个错误未定义的方法'[]'零:NilClass – Jazz 2012-07-25 08:21:16

+0

然后我认为你的日志报价必须是错误的。 '“project”=> {“start_date”=>“25-07-2012”,“end_date”=>“”}' – 2012-07-26 07:35:35