0

簡単な質問です。開始日、終了日、およびキーワードを使用してデータベースを検索するページを設定しようとしています。19-07-2012 を検索すると、パスは次のようになります

search?utf8=%E2%9C%93&project%5Bstart_date%5D=19-07-2012&project%5Bend_date%5D=&%5Bstatus%5D=&keywords=

すべての結果が表示されます。ただし、キーワードを検索すると、検索が機能します。どこが間違っているのかわかりません。

<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」をキーワードとして検索し、開始日を2012年7月25日として検索すると、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" 

助けてくれてありがとう!

4

2 に答える 2

1

私は自分の問題を修正しました。application.js ファイルと検索ビューを変更しました。

アプリケーション.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>

私のアプリケーションは、開始日と終了日で検索するようになりました。

于 2012-07-25T09:20:36.800 に答える
0

あなたのコードが正しい場合、あなたは呼び出すことを期待しています

Project.search(start_date, end_date, keywords)

あなたの例では、パラメータが入ってきます

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])
于 2012-07-24T16:38:27.427 に答える