2012-07-24 3 views
0

Question rapide. J'essaye de mettre en place une page qui recherche une base de données en utilisant une date de début, une date de fin et des mots-clés. Si je devais rechercher 19-07-2012, le chemin ressembleraitRuby on Rails: recherche par date

recherche? = UTF8% E2% 93% 9C & projet% 5Bstart_date% 5D = 19-07-2012 & projet% 5Bend_date% 5D = & % 5Bstatus% 5D = & mots-clés =

et tous les résultats seraient affichés. Cependant, lorsque je recherche des mots-clés, la recherche fonctionne. Je ne peux pas voir où je vais mal.

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

Contoller:

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 

EDIT:

Quand je recherche avec le caractère "q" comme mot clé, et la date de début comme 25-07-2012, sql ressemble ce

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

Ceci semble seulement chercher le mot-clé "q". Quand je supprime le mot-clé et laisse la date dedans, le sql ressemble à:

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

Merci d'avance pour toute aide donnée!

Répondre

1

J'ai résolu mon propre problème. J'ai changé mon fichier application.js et ma vue de recherche.

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'}); 
}); 

Affichage de la recherche:

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

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

Mon application cherche maintenant avec un début et une date de fin.

0

Si votre code est correct, vous vous attendez à appeler

Project.search(start_date, end_date, keywords) 

Dans votre exemple, les params viennent dans

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

Mais vous appelez

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

Si vos journaux sont correct, vous devriez appeler

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

J'ai essayé votre suggestion, mais j'ai obtenu cette erreur méthode non définie '[] 'pour nil: NilClass – Jazz

+0

alors je pense que votre citation des journaux doit être faux. '" project "=> {" start_date "=>" 25-07-2012 "," end_date "=>" "}' –