首先:請重命名您的字段,因爲created_at可能會導致與ActiveRecord發生衝突。
我確實做到了這與格式M/d/YYYY H A場:M(小時/分鐘在24小時格式)
在你的模型:
attr_accessor :due_date, :due_time
before_validation :make_due_at
def make_due_at
if @due_date.present? && @due_time.present?
self.due_at = DateTime.new(@due_date.year, @due_date.month, @due_date.day, @due_time.hour, @due_time.min)
end
end
def due_date
return @due_date if @due_date.present?
return @due_at if @due_at.present?
return Date.today
end
def due_time
return @due_time if @due_time.present?
return @due_at if @due_at.present?
return Time.now
end
def due_date=(new_date)
@due_date = self.string_to_datetime(new_date, I18n.t('date.formats.default'))
end
def due_time=(new_time)
@due_time = self.string_to_datetime(new_time, I18n.t('time.formats.time'))
end
protected
def string_to_datetime(value, format)
return value unless value.is_a?(String)
begin
DateTime.strptime(value, format)
rescue ArgumentError
nil
end
end
現在
的觀點:
<%= text_field_tag :due_time, I18n.l(@mymodel.due_time, :format => :time) %>
<%= text_field_tag :due_date, I18n.l(@mymodel.due_date, :format => :default) %>
現在
在config /區域設置/ en.yml(如果英語)
date:
formats:
default: "%m/%d/%Y"
time:
formats:
time: "%H:%M"
您可以更改當然的日期格式。
當你有一個帶有日期時間的文本框時,這非常適用,但是當你有兩個文本框時,其中一個與其他時間一起使用時,我需要一個解決方案。 –
添加兩個不支持數據庫的變量,確保他們進入參數並構建「實際值」並分配給「實際變量」?這是你必須添加到模型中的代碼,而不是kickass Rails的魔法,但它應該做到這一點...... – jaydel
謝謝jaydel,我很確定我知道你的意思是使用虛擬屬性。我試圖在我的例子中實現這一點,你能否提供一個例子? –