如何将模型的整数属性映射到字符串?

时间:2015-03-21 20:17:30

标签: ruby-on-rails ruby postgresql

我的数据库中有一个Hotels表,其中一列是:statusinteger)。我希望将这些整数转换为字符串,因此1 = "Awaiting Contract"2 = "Designing"等等......

我已经在Stack上搜索了一些答案,而缺少这些答案让我觉得我是从错误的角度来解决这个问题的?我以前在PHP中执行此操作同时提取数据。新的Rails,所以任何帮助或最佳实践建议将不胜感激。

2 个答案:

答案 0 :(得分:10)

检查enum - docActiveRecord

您可以在此配置:status

class Hotel < ActiveRecord::Base
  enum status: { waiting_contract: 1, designing: 2 }

  def format_status
    status.to_s.humanize
  end
end

它会创建这样的方法:

hotel.waiting_contract?
hotel.designing?

hotel.waiting_contract!
hotel.format_status # => "Waiting contract"

希望有所帮助!

<强>更新

通过覆盖status方法本身可以实现类似的功能,但建议使用单独的方法:

class Hotel < ActiveRecord::Base
  enum status: { waiting_contract: 1, designing: 2 }

  def status
    super.to_s.humanize
  end
end

此外,decorators是您应该查看特定于视图的方法的内容。

答案 1 :(得分:0)

这取决于你需要的清单。上述想法的替代方法是创建哈希。哈希是非常Ruby的,专为这种配对数据而设计。

创建哈希,(枚举输入是自动的。)

   my_h = { "waiting" => 1, "design" => 2 }

然后访问

my_h["waiting"] = 1

你可以用哈希做更多的事情。这只是最简单的情况。

哈希可能满足或不满足您的需求,但它是一个出色的工具,带有一组很好的Ruby工作方法。

http://ruby-doc.org/core-2.2.0/Hash.html