1
的屬性我開始使用Ruby和DataMapper,並且偶然發現了一個我認爲沒有任何意義的問題。比方說,我有以下型號:DataMapper沒有看到分配給@
class Foo
include DataMapper::Resource
property :id, Serial
property :date, Date, required: true
def initialize
@date = Date.today
end
end
我打開了IRB來測試我的模型,建立數據庫連接,並嘗試保存新富:
> foo = Foo.new
> foo.date
=> #<Date: 2013-03-28 ((2456380j,0s,0n),+0s,2299161j)>
> foo.save
然後我得到以下例外:
DataObjects::IntegrityError: foos.date may not be NULL
而且,這是完全有道理的,因爲我根據需要標記了日期。但日期在那裏!我在類的構造函數中分配它!如果我沒有用今天的日期初始化它,並且試圖保存,我只會得到一個驗證錯誤。沒有例外。
什麼我不明白(這就是我要你回答)是,如果我取代
@date = Date.today
與
self.date = Date.today
它的作品! foo被正確保存。這是爲什麼?它是DataMapper內部的錯誤嗎?
這意味着DataMapper會保留某種內部設置/未設置的數據結構,只有在使用setter/getters而不是基礎變量時纔會操作DataSetper。 – Linuxios
@Linuxios:有沒有辦法讓它工作的邏輯方式?它目前的工作方式非常直觀。 –
完全按照你所說的使用'self.date'。實例變量是類的最內部部分 - 如果使用它們與DataMapper的內部進行交互,則會導致火災。 – Linuxios