我在运行Rails 4。
我有一个名为Challenge
的模型,在我的数据库中,我以0-4的形式存储每个挑战的status
。
但是0-4不是很有语义,所以我想定义几个变量(我假设一个常量),这样在任何控制器或视图中我都可以通过调用常量来访问数字:
# Challenge.rb
class Challenge < ActiveRecord::Base
SUGGESTED = 0
APPROVED = 1
OPEN = 2
VOTING = 3
CLOSED = 4
end
我想在我的视图中访问以下内容:
# challenge/_details.html.erb
<% if @challenge.status == CLOSED %>
Challenge is closed, broheim!
<% end %>
但我的视图不想渲染。
uninitialized constant ActionView::CompiledTemplates::CLOSED
设置状态变量的最佳方法是什么,以便在任何需要它们的地方都可以访问它们?(例如,任何存在@challenge
变量的地方)
3条答案
按热度按时间ia2d9nvy1#
您应按以下方式访问它们:
由于
CLOSED
常量是在类中定义的,因此需要使用作用域解析操作符来访问常量。因此,如果您的视图是这样的:u0njafvf2#
编写这样的语句是一个非常糟糕的主意:你的对象必须处理它自己的逻辑。想象一下,如果有一天你决定合并状态,你会改变你代码库中的每一个条件吗?不,你应该使用一个处理逻辑的方法。
我会这样做:
那么在你看来:
oknwwptz3#
我强烈建议您使用枚举,如果您要求枚举特定的值,那么使用Rails 4.1中引入的枚举。
之后,您可以使用以下方法:
要使用枚举,必须声明一个具有枚举名的整数列(即:“状态”)的“挑战”(或哪个表与型号相关)表中。
有关枚举的更多信息