2012-05-01 79 views
0

我有一個虛擬屬性start_date和數據庫列start(日期時間)。我如何重寫模型中另一個虛擬屬性的屬性?

如何覆蓋start的日期(但不是時間)start_date的日期?

我在setter方法中嘗試了這一點,記錄器說self.start/start被設置,但是在數據庫中並且更新日誌start仍然是舊日期。

# model: db table with columns: id(int), start(datetime) 
class DateTimeTest < ActiveRecord::Base 

    attr_accessible :start_date, :start 

    def start_date=(value) 
    logger.debug '>>>>' + start.inspect 
    logger.debug '>>>>' + self.start.inspect 
    start = DateTime.new(value.to_date.year, value.to_date.month, value.to_date.mday, 15,15,15) 
    self.start = DateTime.new(value.to_date.year, value.to_date.month, value.to_date.mday, 15,15,15) 
    logger.debug '>>>>' + start.inspect 
    logger.debug '>>>>' + self.start.inspect 
    end 

end 

# view 
<%= simple_form_for(@datetimetest) do |f| %> 
    <%= f.input :start_date, :as => :string %> 
    <%= f.input :start %> 
    <%= f.button :submit %> 
<% end %> 

# controller is a base scaffolding controller 

在日誌中我可以看到,start填充:

Parameters: {..., "datetimetest"=>{"start_date"=>"03.05.2012", "start(1i)"=>"2012", "start(2i)"=>"5", "start(3i)"=>"1", "start(4i)"=>"13", "start(5i)"=>"05"} 
+1

你*絕對*確定在你的類實例中self.start屬性已經用值初始化了嗎? –

+0

我在日誌中有以下內容:參數:{...,「datetimetest」=> {「start_date」=>「03.05.2012」,「start(1i)」=>「2012」,「start(2i) 「=>」5「,」start(3i)「=>」1「,」start(4i)「=>」13「,」start(5i)「=>」05「}另外,如果添加setter方法開始並做一個logger.debug value.inspect我得到了日期時間。 – tonymarschall

+0

Start是一個數據庫列,所以這應該通過基本訪問器來設置。 – tonymarschall

回答

1

日期時間分解到年,月,月,小時,分鐘的日期,和第二,但並不方便地闖入日期和時間。

def start_date(value) 
    start = DateTime.new(value.year, value.month, value.mday, 
         start.hour, start.minute, start.second) 
    logger.debug self.start.inspect 
end 
+0

我的問題是我無法訪問開始。我嘗試了你的方法,並self.start,但都是零。 – tonymarschall

+0

然後你的問題是你還沒有設置開始。要麼開始,要麼爲start.nil添加代碼? –

+0

Mh,start是一個數據庫列,所以這應該通過基本訪問器來設置。 – tonymarschall