0

ユーザーが開始日と終了日を選択し、ボタンレポートを押すレポートページを作成しようとしています。その後、非表示の div が表示されました。

私の検索は部分的ではありません。

私は jquery_datepicker を使用しているので、ビューからのコードは次のとおりです。

<%= form_tag(:controller => "financial_reports", :action => "index", :method => "post")%>
  <%= datepicker_input "financial_report","start_date", :dateFormat => "dd/mm/yy" %>
  <%= datepicker_input "financial_report","end_date", :dateFormat => "dd/mm/yy" %>
 <%=  submit_tag "Run Report"%>
<% end %>

コントローラーからの私のコードは次のとおりです。

  def search
   @financial_reports = current_user.financial_reports.search(params[:start_date], params[:end_date]
  render :index
  end

私のモデルでは:

def self.search(from,to)
  find(:all, :conditions => [ "BETWEEN ? AND ?", from, to])
 end

そして、それは私にエラーを与えます:

    ActiveRecord::StatementInvalid in FinancialReportsController#search 
    SELECT `financial_reports`.* FROM `financial_reports`  WHERE `financial_reports`.`user_id` = 67 AND (BETWEEN NULL AND NULL)

そしてこの下:

     Parameters:

  {"utf8"=>"✓",
 "authenticity_token"=>"AMobLLRV3aAlNn6b4Au+1nRP2AN1TLQcBCytBXhDA/g=",
  "type"=>"",
   "financial_report"=>{"start_date"=>"05/08/2012",
      "end_date"=>"11/08/2012"},
    "commit"=>"Run Report",
   "method"=>"post"}

私のエラーはどこですか?

4

1 に答える 1

1

両方のパラメーターが常に設定されている場合は、次を使用できます。

@financial_reports = current_user.financial_reports.where(:created_at => ((params[:start_date].to_date)..(params[:end_date].to_date))

そうでない場合は、(たとえば)これを行うことができます:

@financial_reports = current_user.financial_reports

if params[:start_date].present?
  @financial_reports = current_user.financial_reports.where("created_at >= ?", params[:start_date])
end

if params[:end_date].present?
  @financial_reports = current_user.financial_reports.where("created_at <= ?", params[:end_date])
end

おそらく、これをスコープにカプセル化する必要があります。

于 2012-08-06T10:39:50.530 に答える