在Rails中初始化class_attribute
的正確方法是什麼?在Rails中初始化class_attribute的正確方法是什麼?
我使用這個:
class Foo < ActiveRecord::Base
class_attribute :foobar
self.foobar = []
# ...
end
這似乎是做工精細,但也似乎顯得有點非Railsy給我。
在Rails中初始化class_attribute
的正確方法是什麼?在Rails中初始化class_attribute的正確方法是什麼?
我使用這個:
class Foo < ActiveRecord::Base
class_attribute :foobar
self.foobar = []
# ...
end
這似乎是做工精細,但也似乎顯得有點非Railsy給我。
一切都說明如下:http://apidock.com/rails/Class/class_attribute
如果你點擊「查看源文件」,你會看到有沒有可用的設置默認值的選項。你做得對。
你做得很好(除非你繼承)。
如果您繼承此類,則可以使用inherited
方法來避免「泄漏」。在今年的Rails分支主加入
def self.inherited(sub_class)
self.foobar = self.foobar.clone
# or `self.foobar = []`
end
拒絕警告:它看起來像某物(可能是一個gem /插件)重寫ActiveRecord :: Base.inherited方法。執行此鉤子非常重要,以便您的模型正確設置。已經添加了一種解決方法來阻止這在3.2中導致錯誤,但如果掛鉤被覆蓋,未來的版本將不起作用。如果您使用Kaminari,請升級,因爲它已知有此問題。 – 2015-12-27 01:24:15
一個default
選項,勾選:https://github.com/rails/rails/pull/29270。有了這個變化,你可以做:
class Foo < ActiveRecord::Base
class_attribute :foobar, default: []
end
僅供參考我沒有downvote你,但我不能看到我對你粘貼的URL做什麼背書。實際上我已經查看過是否有一個默認值的選項。 Rails中有足夠的魔力,我想得到明確的答案。在四處搜索後,我發現這個正式的Rails指南使用了與http://edgeguides.rubyonrails.org/active_support_core_extensions.html#class-attributes相同的初始化方法,所以我想這一切都很好! – poochenza 2012-01-03 13:54:32
將upvote,對此感到遺憾。很高興你找到了它。請編輯問題,以便我可以更正此問題。 – lzap 2012-01-03 17:40:17
你必須改變你的問題中至少有一個字符,否則我無法調高... – lzap 2012-01-04 09:24:15