【问题标题】:Select drop down from enum not resulting从枚举中选择下拉菜单未产生
【发布时间】:2019-06-28 19:43:10
【问题描述】:

我有以下枚举:

  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]}) %>

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

试过了:

        <%= 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

将产生所有枚举值。 我阅读的每一种方式都与我上面尝试的方式相同

【问题讨论】:

  • &lt;%= f.select :fulfillment_status, options_for_select(Order.fulfillment_statuses.map { |label, int| [label.humanize.capitalize, int] }) %&gt; 返回什么?

标签: ruby-on-rails ruby enums


【解决方案1】:

您将获得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 调用的方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多