Ruby on rails 有没有办法将标签与事件机中的状态关联起来?

Ruby on rails 有没有办法将标签与事件机中的状态关联起来?,ruby-on-rails,aasm,Ruby On Rails,Aasm,这似乎是一个看似简单的问题:在Rails上的事件机器中,是否有可能将一个对人类友好的字符串与一个对机器友好的状态名称相关联?目前我正在使用AASM,但我所看到的事件机宝石中似乎没有一个能提供这种功能 我有一些奇怪的大写状态,比如“Sent to PE Review”,它“扁平化”为:Sent_to_PE_Review,作为一个状态符号。我不能很容易地返回到一个正确大小写的标签,以便在视图中的对象上显示,或者在窗体上的下拉选择中显示。在我看来,在模型中的状态定义上应该有一个类似于标签:“发送到PE

这似乎是一个看似简单的问题:在Rails上的事件机器中,是否有可能将一个对人类友好的字符串与一个对机器友好的状态名称相关联?目前我正在使用AASM,但我所看到的事件机宝石中似乎没有一个能提供这种功能

我有一些奇怪的大写状态,比如“Sent to PE Review”,它“扁平化”为
:Sent_to_PE_Review
,作为一个状态符号。我不能很容易地返回到一个正确大小写的标签,以便在视图中的对象上显示,或者在窗体上的下拉选择中显示。在我看来,在模型中的状态定义上应该有一个类似于
标签:“发送到PE Review”
的选项,但我找不到任何这样的参考


我已经求助于创建一个单独的“status”字段,并根据状态在保存前的
回调中放入相应的字符串。这将修复视图,但不会修复跳转状态窗体中的下拉列表。当我考虑用国家符号和标签字符串组合某种集合时,整个过程感觉非常不符合轨道,我想我错过了一些简单的东西。“Rails方法”是什么?

我在类中创建了一个哈希来进行翻译:

STATUS_HASH = [
  { state: "screening_in_process", label: "Screening In Process" },
  { state: "screenings_complete", label: "Screenings Complete" },
  ...
  { state: "work_complete", label: "Work Complete" },
  { state: "work_canceled", label: "Work Canceled" }
]
在编辑表单中,我可以使用(简单表单和HAML):

事实证明,这解决了这两个问题。在show视图中,我可以使用:

= Project::STATUS_HASH.find{ |s| s[:state] == @project.aasm_state }[:label]
我已经不再需要在记录上为此存储一个单独的字段,也不再需要回调来更新它


也许我应该尝试在AASM gem中添加对标签的支持,但我想它会有效地在后台使用相同的机制。

没有内置的方法可以从符号中获得正确的大小写…
一些符号。人性化可能是你能做的最好的方法。您可以创建一个助手来标识某些需要大写的字符(通过正则表达式),或者创建一个yml文件(或散列),将状态映射到其人类可读的对应项,并在视图中使用该文件。
= Project::STATUS_HASH.find{ |s| s[:state] == @project.aasm_state }[:label]