1

问题:有一个enum值列表,比如说status。但是每个状态都需要每个键的更多信息,而不仅仅是passedor failed

我正在寻找一个更优雅的解决方案来解决我现在拥有的问题:

class Result < ActiveRecord::Base
  enum status: {passed: 0, failed: 1}, _default: :passed

  def icon
    Result.icons[status]
  end

  def text
    Result.texts[status]
  end

  def self.icons
    {passed: 'fa-check', failed: 'fa-cross'}.with_indifferent_access
  end

  def self.texts
    {passed: 'Your result has passed', failed: 'Your result has failed'}.with_indifferent_access
  end
end

所以在视图中我可以做类似的事情:

result = Result.new(status: :passed)
result.icon
result.text

我在这里找到了一个带有看似优雅的解决方案的响应ActiveModel::Serializer,但这不是一个有效的示例。至少,我没有让它在 Rails 6 中工作。

我的解决方案工作正常,但是当您开始为每个状态获取 5 个属性和 8 个不同状态时,它变得非常乏味。

也许我实际上应该将它映射到 yaml 文件?还是使用i18n

无论如何,希望我的问题很清楚,期待看到您对此的解决方案。

4

0 回答 0