0

モデルの 1 つの属性に関連付けられた 2 つのフィールドがあります。start_at と end_at という 2 つの属性に適用しています。jQuery 用の Timepicker プラグインを使用しています。

ここに私の答えを基にしました:https://stackoverflow.com/questions/18461798/rails-4-convert-datetime-into-separate-date-and-time-fields# =

私の問題は、日付が適切に解析されていないことです。

以下は私のコードです:

予約モデル:

before_save :convert_to_datetime
attr_accessor :start_date, :start_time, :end_date, :end_time

def start_date
    start_at.strftime("%d/%m/%Y") if start_at.present?
end 

def start_time
    start_at.strftime("%I:%M%p") if start_at.present?
end

def start_date=(date)
# Change back to datetime friendly format
@start_date = Date.parse(date).strftime("%Y-%m-%d")
end

def start_time=(time)
  # Change back to datetime friendly format
  @start_time = Time.parse(time).strftime("%H:%M:%S")
end

def end_date
    end_at.strftime("%d/%m/%Y") if end_at.present?
end 

def end_time
    end_at.strftime("%I:%M%p") if end_at.present?
end

def end_date=(date)
  # Change back to datetime friendly format
  @end_date = Date.parse(date).strftime("%Y-%m-%d")
end

def end_time=(time)
  # Change back to datetime friendly format
  @end_time = Time.parse(time).strftime("%H:%M:%S")
end

def convert_to_datetime
    self.start_at = DateTime.parse("#{@start_date} #{@start_time}")
    self.end_at = DateTime.parse("#{@end_date} #{@end_time}")
end

強力なパラメーター:

params.require(:task).permit(:category_id, :subcategory_id, :title, :description, :pay_offer, :pay_type, :county_id, :area_id, appointments_attributes: [:id, :start_date, :start_time, :end_date, :end_time])

ご参考までに、予定はタスク モデルのネストされた属性です。

エラーは次のとおりです。

ArgumentError (invalid date):
  app/models/appointment.rb:26:in `parse'
  app/models/appointment.rb:26:in `start_date='
  app/controllers/tasks_controller.rb:9:in `create'

この行を参照しています: @start_date = Date.parse(date).strftime("%Y-%m-%d")

ログ:

 "appointments_attributes"=>{"0"=>{"start_date"=>"3/20/2015",
 "start_time"=>"12:30 AM",
 "end_date"=>"3/21/2015",
 "end_time"=>"01:30 AM"}}},
 "commit"=>"Create Task"}

助けてください。:(

4

1 に答える 1

0

問題は、Ruby が %d/%m/%Y 形式の日付を期待しているのに、%m/%d/%Y で渡していることです (日と月が変わっていることに注意してください)。日付「2015 年 3 月 20 日」は 20 番目の月がないため無効です。:)

Date.parse だけを使用する代わりに、解析する日付形式を指定できる strptime を使用する必要があります。

 Date.strptime(date, "%m/%d/%Y")
于 2015-03-05T12:03:51.300 に答える