ruby-on-rails – Ruby常量查找

这可能是一个简单的问题,但我试图从值中查找 Ruby中的常量名称.例如:
class Xyz < ActiveRecord::Base
  ACTIVE    = 1
  PENDING   = 2
  CANCELED  = 3
  SENT      = 4
  SUSPENDED = 5
end

我的数据库中的状态为1.我想基于此检索ACTIVE,以便我可以在视图中显示它.

有什么好办法呢?

解决方法

class Module
  def constant_by_value( val )
    constants.find{ |name| const_get(name)==val }
  end
end

class Xyz
  ACTIVE    = 1
  PENDING   = 2
  CANCELED  = 3
  SENT      = 4
  SUSPENDED = 5
end

p Xyz.constant_by_value(4)
#=> :SENT

但是,我不会这样做:使用程序化名称作为视图的值似乎是一个坏主意.您可能会遇到想要更改显示名称的情况(可能“暂停”应显示为“暂停”),然后您必须重构代码.

我使用模型中的常量在视图或控制器中放置一个映射:

status_name = {
  Xyz::ACTIVE    => "Active",Xyz::PENDING   => "Pending",Xyz::CANCELED  => "Canceled",Xyz::SENT      => "Away!",Xyz::Suspended => "On Hold"
}
@status = status_name[@xyz.status_id]

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...