Rails - 常量哈希?

Nei*_*ton 10 ruby ruby-on-rails

我的应用程序需要一个模型(?),它基本上包含另一个实体的状态.在实体中我想存储状态的ID,但在我的应用程序中,视图是根据一个好的单词描述进行讨论.例如,1 =新的,2 =使用等等.

我怎样才能以最好的方式实现这一点,这意味着我可以轻松设置和检索此状态列而无需重复自己?

最终我想要的东西

Foo.status = 'New'  (actually sets value to 1)
Run Code Online (Sandbox Code Playgroud)

Foo.status  (returns 'New', but stores 1)
Run Code Online (Sandbox Code Playgroud)

我是否以正确的方式思考这个问题?

Rôm*_*con 14

您可以编写自定义编写器方法:

STATUS_VALUES = { 1 => 'new', 2 => 'modified', 3 => 'deleted' }

class Foo
  attr_reader :status_id

  def status
    STATUS_VALUES[@status_id]
  end

  def status=(new_value)
    @status_id = STATUS_VALUES.invert[new_value]
    new_value
  end
end
Run Code Online (Sandbox Code Playgroud)

例如,以下程序:

foo_1 = Foo.new

foo_1.status = 'new'
puts "status: #{foo_1.status}"
puts "status_id: #{foo_1.status_id}"

foo_1.status = 'deleted'
puts "status: #{foo_1.status}"
puts "status_id: #{foo_1.status_id}"
Run Code Online (Sandbox Code Playgroud)

输出:

status: new
status_id: 1
status: deleted
status_id: 3
Run Code Online (Sandbox Code Playgroud)