我有以下枚举:
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
将得出所有枚举值。 我阅读过的每种方法都与我上面尝试过的方法相同
答案 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