从没有结果的枚举中选择下拉列表

时间:2019-06-28 19:43:10

标签: ruby-on-rails ruby enums

我有以下枚举:

  enum fulfillment_status: { processing: 1, partially_fulfilled: 2, fulfilled: 3 }

我尝试通过以下方式进行下拉选择:

        <%= f.select :fulfillment_status, options_for_select(@order.fulfillment_status.map {|k, v| [k.humanize.capitalize, v]}) %>

错误:“处理”的未定义方法“ map”:字符串

尝试:

        <%= f.select :fulfillment_status, options_for_select(@order.fulfillment_statuses.map {|k, v| [k.humanize.capitalize, v]}) %>
        <%= f.select(:fulfillment_status, @order.fulfillment_statuses.keys.map {|fs| [fs.titleize,fs]}) %>

错误:#的未定义方法“ fulfillment_statuses”

尝试过:

        <%= f.select :fulfillment_status, options_for_select(@order.fulfillment_statuses) %>

错误:

#的未定义方法“ fulfillment_statuses”

这很奇怪,因为在控制台中进行操作=

Order.fulfillment_statuses

将得出所有枚举值。 我阅读过的每种方法都与我上面尝试过的方法相同

1 个答案:

答案 0 :(得分:0)

由于Error: undefined method map for "processing":String由数据库列的值表示,因此得到@order.fulfillment_status。您期望它是一个哈希,但是该哈希是在类而非实例上定义的。

您想要的是Order.fulfillment_statuses

在使用enum fulfillment_status: { processing: 1, partially_fulfilled: 2, fulfilled: 3 }的类上定义了称为self.fulfillment_statuses的类方法时,将使用Order。该类方法不能作为实例方法使用,这是您尝试通过@order.fulfillment_statuses

调用的方法