我来自Java背景。我想知道是否有办法让一个类存储常量值。
具体到我的问题,我想知道我是否可以拥有类似的东西:
@user.authentications.create(:uid => "12345", :provider => Provider::FACEBOOK)
其中Provider类存储了所有静态常量。另外,这是在Ruby on Rails中执行此操作的正确方法吗?
额外信息: 我试过上面的
class Provider
FACEBOOK = "facebook"
TWITTER = "twitter"
end
但它给出了错误:
NameError:
uninitialized constant Provider
答案 0 :(得分:1)
选项1(类变量):
class Provider
@@FACEBOOK = "facebook"
@@TWITTER = "twitter"
end
@user.authentications.create(:uid => "12345", :provider => Provider.FACEBOOK)
在某些情况下,强烈建议不要使用类变量。更好的方法是使用元伏都教:
class Provider
@FACEBOOK = "facebook"
@TWITTER = "twitter"
class << self
attr_reader :FACEBOOK, :TWITTER
end
end
@user.authentications.create(:uid => "12345", :provider => Provider.FACEBOOK)
答案 1 :(得分:0)
尝试使用双冒号前缀Provider::FACEBOOK
::Provider::FACEBOOK
这设置了一个绝对路径,因此Ruby不会尝试在当前上下文/类/ Controller中查找常量。 (我的假设是现在它认为常量是在UserController::Provider::FACEBOOK
)
关于在哪里放置常量还有很多其他帖子,所以请查看:
基本上,将常量放在实际需要它们的位置。如果您想在任何地方访问它们,请在Controller / Model或environment.rb
中。
答案 2 :(得分:0)
如果在模型文件中声明该类,则可以访问该类。如果您在lib文件中声明,那么您在application.rb文件中添加了一行
config.autoload_paths += %W(#{config.root}/lib)