我有一個虛擬屬性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"}
你*絕對*確定在你的類實例中self.start屬性已經用值初始化了嗎? –
我在日誌中有以下內容:參數:{...,「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
Start是一個數據庫列,所以這應該通過基本訪問器來設置。 – tonymarschall