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)