这可能是一个简单的问题,但我试图从值中查找
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]