2013-09-16 116 views
0

我有一個模型,其中包含datetime屬性,該屬性填寫在使用bootstrap-datetimepicker(http://www.malot.fr/bootstrap-datetimepicker/demo.php)的形式。日期時間屬性每次使用日期時間選擇器更新

問題是,每當我改變窗體中的內容並調用update控制器時,該屬性都被視爲不同,並且通過導軌更新。 基本上,屬性在數據庫中更新,即使它在表單中沒有更改。

我想這是我提交日期格式(這是一個文本字段)的問題。我不確定文本應該是什麼格式。

下面是一些代碼:

模型

class Order < ActiveRecord::Base 
    attr_accessible :filled_date 
end 

HTML表單的日期時間的部分:

$(".form_datetime").datetimepicker({ 
     weekStart: 1 
     daysOfWeekDisabled: [5,6] 
     format: "dd M 'yy - hh:ii" 
     autoclose: true 
     pickerPosition: "bottom-left" 
     todayBtn: true 
     todayHighlight: true 
     linkField: linkField 
     linkFormat: "yyyy-mm-dd hh:ii" 
}) 

<div class="input-append date form_datetime"> 
    <input class="datetime_picker optional input-medium" id="visible_datetime" name="visible_datetime" type="text" value="16 Sep '13 - 18:45" disabled=""/> 
</div> 
<input class="datetime_picker optional input-medium" id="product_orders_attributes_0_filled_date" name="product[orders_attributes][0][filled_date]" size="30" type="hidden" value="2013-09-16 18:45" disabled=""> 

這與初始化我認爲 這是linkFormat這裏是我需要調整以解決我的問題的部分。

一旦點擊的形式發送的(這是一個嵌套的表格):

"orders_attributes"=> 
    {"0"=> 
    {"filled_date"=>"2013-09-16 17:49", 
    "_destroy"=>"", 
    "id"=>"7"}}, 

這生成的日誌中這樣一行:

UPDATE "orders" SET "filled_date" = '2013-09-16 15:49:00.000000', "updated_at" = '2013-09-16 16:45:32.557340' WHERE "orders"."id" = 7 

任何想法?

感謝,

UPDATE:

調查多了,我發現鋼軌內部工作,他們反正更新的對象的所有字段,然後該方法_field_changed?調用的每個來驗證,如果它是改變與否。

的方法是這樣的在軌3.2.14:

From: /usr/local/rvm/gems/ruby-2.0.0-head/gems/activerecord-3.2.14/lib/active_record/attribute_methods/dirty.rb @ line 87 ActiveRecord::AttributeMethods::Dirty#_field_changed?: 

    81: def _field_changed?(attr, old, value) 
    82: if column = column_for_attribute(attr) 
    83:  if column.number? && (changes_from_nil_to_empty_string?(column, old, value) || 
    84:       changes_from_zero_to_string?(old, value)) 
    85:  value = nil 
    86:  else 
=> 87:  value = column.type_cast(value) 
    88:  end 
    89: end 
    90: 
    91: old != value 
    92: end 

,爲什麼物體似乎每次我提出了到update控制器時間要更新的原因是,舊的和價值評估是不同的:

[2] pry(#<EntryOrder>)> old 
=> Tue, 17 Sep 2013 01:49:00 CEST +02:00 
[3] pry(#<EntryOrder>)> value 
=> "2013-09-17 01:49:00" 
[4] pry(#<EntryOrder>)> column.type_cast(value) 
=> 2013-09-17 01:49:00 UTC 

即是舊的是在CEST中,而值被解釋爲UTC。

現在我得弄清楚如何告訴rails新的值也在CEST中。

任何線索?

UPDATE2:

我已經想通bootstrap-datetimepicker缺乏的支持,從而切換到使用jquery-ui datepickerjquery timepicker處理兩個獨立的inputfields。我發現自己也遇到了同樣的問題,並將問題追蹤到rails 3.2.14代碼中,在框架中可能存在一個bug,我報告了這個bug,其中here

我不知道我應該實現這一點有不同的方式。

回答