我想給我的車型之一的屬性訪問器默認的八個零的數組。這是第一個語法我想:如何使attr_accessor_with_default與集合一起工作?
attr_accessor_with_default:weekly_magnitude_list, [0,0,0,0,0,0,0,0]
上面並沒有做什麼,我預料的,因爲該模型的所有實例結束共享相同的Array對象。該避讓我到了博客(http://barelyenough.org/blog/2007/09/things-to-be-suspicious-of-attr_accessor_with_default-with-a-collection/)提出了不同的語法,基本上包裹在一個塊中的默認值。
attr_accessor_with_default(:weekly_magnitude_list) {[0,0,0,0,0,0,0,0]}
這不起作用(對我來說,在Rails 3中)。任何時候我調用訪問器,我似乎都會得到一個全新的Array對象。這實際上意味着我無法寫信給它。
有誰知道正確的方式做到這一點?
爲了您的快樂,我已經包含了簡單的測試,證明了該輸出:
class Container
attr_accessor_with_default :naive_collection, [0,0]
attr_accessor_with_default(:block_collection) {[0,0]}
end
> c = Container.new
=> #<Container:0x7f3610f717a8>
> c.naive_collection[0] = "foo"
=> "foo"
> Container.new.naive_collection
=> ["foo", 0]
# expected [0,0]
> c.block_collection[0] = "foo"
=> "foo"
> c.block_collection
=> [0, 0]
# expected ["foo", 0]