2

「2013 年 5 月 14 日 - 2013 年 5 月 22 日」の形式で日付範囲を投稿するフォーム フィールドがあります。私のモデルには 2 つの別個の日付フィールドがbeginありend、それぞれの開始日と終了日はフォーム フィールドから取得されます。日付範囲を正しいフィールドに入れるための最良の MVC 方法は何ですか?

コントローラーのメソッドで日付範囲を手動で分解しようとしましたがcreate、レコードが作成される前に、更新されたパラメーターがモデルで適切に表示されないようです。

編集: Keith Wood の datepick を使用しているため、日付範囲はその形式になり、単一の入力フィールドに日付が出力されます。

私が現在やろうとしているのはこれです (contractは私のモデルの名前でdates、入力日付範囲です:
beginDate = params[:dates].split("-")[0].strip()
endDate = params[:dates].split("-")[1].strip()
params.delete :dates
params[:contract][:begin] = Date.strptime(beginDate, '%m/%d/%Y')
params[:contract][:end] = Date.strptime(endDate, '%m/%d/%Y')
@contract = Contract.new(params[:contract])

...しかし、params へのこれらの変更は、レコードが作成されて検証されるまでには表示されません。

4

2 に答える 2

5

フィールドを取得して分割し、各部分を適切なフィールドに配置するセッターをモデルに定義します。

def date_range=(val)
  begin_str, end_str = val.split(' - ')
  self.begin_at = Date.parse(begin_str)
  self.end_at = Date.parse(end_str)
end

update_attributesこれは、直接呼び出された場合、またはまたはなどの一括代入メソッドから呼び出された場合に機能しcreateます。モデルでこれがすでに定義されている場合date_rangeは、(または関連するパラメーター名) を追加してください。attr_accessible

例のフィールド名を変更しました。一方はメソッドであり、もう一方は Ruby 構文の一部であるため、フィールド名として避ける必要がありますbeginend

于 2013-04-05T16:21:29.160 に答える