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

Its*_*ner 3 ruby postgresql ruby-on-rails

我的数据库中有一个Hotels表,其中一列是:status(integer).我期待将这些整数转换成字符串,所以1 = "Awaiting Contract",2 = "Designing"等等...

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

Paw*_*zak 10

检查enumActiveRecord- 文档.

在这里你可以配置你的:status:

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

  def format_status
    status.to_s.humanize
  end
end
Run Code Online (Sandbox Code Playgroud)

它会创建这样的方法:

hotel.waiting_contract?
hotel.designing?

hotel.waiting_contract!
hotel.format_status # => "Waiting contract"
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!

UPDATE

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

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

  def status
    super.to_s.humanize
  end
end
Run Code Online (Sandbox Code Playgroud)

此外,装饰器是您应该查看特定于视图的方法的东西.