有没有办法将标签与事件机器中的状态相关联?
Is there a way to associate a label with a state in an event machine?
这似乎是一个看似简单的问题:是否可以在 Rails 上的事件机器中将人类友好的字符串与机器友好的状态名称相关联?我现在正在使用 AASM,但我看过的 none 事件机器 gems 似乎提供了这个。
我有奇怪的大写状态,例如 "Sent to PE Review",其中 "flatten" 到 :sent_to_pe_review
作为状态符号。我无法轻松地返回到在视图中的对象上或在表单的下拉列表 select 中显示的正确大小写的标签。在我看来,模型中状态的定义应该有一个像label: "Sent to PE Review"
这样的选项,但我找不到任何这样的参考。
我已经求助于创建一个单独的 "status" 字段,并根据状态在 before_save
回调中将适当的字符串放入其中。这修复了视图,但没有修复跳跃状态表单中的下拉列表。当我考虑用状态符号和标签字符串装配某种集合时,整个事情感觉非常不像 Rails,而且我想我错过了一些简单的东西。这样做的 "Rails way" 是什么?
我最终在 class 中创建了一个散列来进行翻译:
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" }
]
在编辑 _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]
并且我已经删除了为此在记录中存储单独字段的需要,以及更新它的回调。
也许我应该尝试在 AASM 中添加对标签的支持 gem,但我想它会在后台有效地使用相同类型的机制。
这似乎是一个看似简单的问题:是否可以在 Rails 上的事件机器中将人类友好的字符串与机器友好的状态名称相关联?我现在正在使用 AASM,但我看过的 none 事件机器 gems 似乎提供了这个。
我有奇怪的大写状态,例如 "Sent to PE Review",其中 "flatten" 到 :sent_to_pe_review
作为状态符号。我无法轻松地返回到在视图中的对象上或在表单的下拉列表 select 中显示的正确大小写的标签。在我看来,模型中状态的定义应该有一个像label: "Sent to PE Review"
这样的选项,但我找不到任何这样的参考。
我已经求助于创建一个单独的 "status" 字段,并根据状态在 before_save
回调中将适当的字符串放入其中。这修复了视图,但没有修复跳跃状态表单中的下拉列表。当我考虑用状态符号和标签字符串装配某种集合时,整个事情感觉非常不像 Rails,而且我想我错过了一些简单的东西。这样做的 "Rails way" 是什么?
我最终在 class 中创建了一个散列来进行翻译:
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" }
]
在编辑 _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]
并且我已经删除了为此在记录中存储单独字段的需要,以及更新它的回调。
也许我应该尝试在 AASM 中添加对标签的支持 gem,但我想它会在后台有效地使用相同类型的机制。