有没有一种方法可以将标签与事件机中的状态关联起来



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

我有一些奇怪的大写状态,比如"发送给PE Review",它"扁平化"为:sent_to_pe_review作为状态符号。我很难找到一个大小写正确的标签来显示在视图中的对象上,或者在窗体上的下拉选择中。在我看来,应该有一个像label: "Sent to PE Review"这样的选项来定义模型中的状态,但我找不到任何这样的引用。

我采用了创建一个单独的"status"字段的方法,并根据状态在before_save回调中放入适当的字符串。这修复了视图,但没有修复表单中跳转状态的下拉列表。当我考虑用状态符号和标签字符串来组装某种集合时,整个过程感觉非常不像Rails,我想我错过了一些简单的东西。实现这一点的"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" }
]

在edit_form中,我可以使用(与simple_form和HAML一起使用(:

= f.input :aasm_state, collection: Project::STATUS_HASH.map { |s| [s[:label], s[:state]] }

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

= Project::STATUS_HASH.find{ |s| s[:state] == @project.aasm_state }[:label]

我已经消除了在记录中存储一个单独字段的需要,以及更新它的回调

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

相关内容

  • 没有找到相关文章