在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