1

Rails プラグイン (バイナリ ロジックのSearchlogic ) は、日付でフィルター処理する機能を提供します。私は自分のフォームをそのように設定しています...

<% form_for @search do |f| %>
    <%= f.label :start %> <%= f.select :due_at_after, [[['','']],['November', '2009-11-01'.to_date],['December', '2009-12-01'.to_date]]  %><br>
    <%= f.label :end %> <%= f.select :due_at_before, [[['','']],['December', '2009-12-01'.to_date],['January', '2010-01-01'.to_date]]  %>
    <%= f.submit 'Search' %>
<% end %>

しかし、コントローラーで生成された @search オブジェクトから返される日付...

@search = Task.with_member(current_user).search(params[:search])

このような日付パラメータを生成しています

{:due_at_after=>Sat, 31 Oct 2009 20:00:00 EDT -04:00}

2 つの形式では、選択したドロップダウンがフォームに表示されません。searchlogic オブジェクトの形式もタイムゾーン調整時刻を使用しているように見えます。

これを処理する方法について何か考えはありますか?

4

2 に答える 2

1

文字列を日付に変換し、日付を文字列に戻すため、問題の大部分が発生しているようです。必要以上にやっている可能性があると思います。

HTML フォームは実際には日付を「理解」していません。文字列を「理解」しているだけです。したがって、日付の代わりに文字列を渡しても問題ありません。つまり、 を削除しても問題ありませんto_date

<% form_for @search do |f| %>
    <%= f.label :start %>
    <%= f.select :due_at_after,
          ['November', '2009-11-01'],['December', '2009-12-01']],
          :include_blank => true
    %>
    <br/>
    <%= f.label :end %>
    <%= f.select :due_at_before,
          [['December', '2009-12-01'],['January', '2010-01-01']],
          :include_blank => true
    %>
    <%= f.submit 'Search' %>
<% end %>

:include_blank => trueまた、代わりに[['','']](私の意見では、より人間が読める)を使用することを好み、閉じた<br/>タグ(標準のhtmlのもの-タイプミスをした可能性がありますか?)を使用しました。

ちなみに、日付を指定したい場合は、日付コンストラクタを使用できます。文字列を作成してそこから日付を解析するよりも、記述が短く、実行が高速です。

#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true
于 2009-12-04T08:38:03.883 に答える
0

特定の月の記録を探していますか? これについては、私のby_star gem/plugin をチェックしてください。

于 2009-12-02T02:03:19.023 に答える