这是一段使用enum多次的代码:
.where("items.state in (#{Workflow::ItemStatus::MOVING},#{Workflow::ItemStatus::WAITING},#{Workflow::ItemStatus::EXECUTING},#{Workflow::ItemStatus::ASSIGNED})")
我不喜欢的是Workflow::ItemStatus
命名空间重复多次产生一个长字符串。
我想将代码包装在一些允许我这样做的结构中:
.where("items.state in (#{[MOVING, WAITING, EXECUTING, ASSIGNED].join(',')})")
答案 0 :(得分:1)
你可以写
constants = %i(MOVING WAITING EXECUTING ASSIGNED)
.where("items.state in (?)", constants.map { |c| Workflow::ItemStatus.const_get(c) })
答案 1 :(得分:0)
我为自己找到了妥协解决方案:
st = Workflow::ItemStatus
Item.joins(.....).where("items.state in (#{st::MOVING},#{st::WAITING},#{st::EXECUTING},#{st::ASSIGNED})")