【问题标题】:How do I specify a specific enum value as a hidden field using Simple Form?如何使用简单表单将特定枚举值指定为隐藏字段?
【发布时间】:2018-05-27 07:43:57
【问题描述】:

我有一个PortStock.rb 模型,它有以下枚举:

class PortStock < ApplicationRecord    
  enum action: [ :buy, :sell ]
end

我想做的是在我的部分表单上,我想将PortStock.buyPortStock.sell 包含为隐藏字段(这将由与表单一起发送的参数决定)。

我不知道在下面我的input_fieldvalue: 属性中添加什么。

<%= f.input_field :action, as: :hidden, value: ??? %> 

想法?

【问题讨论】:

    标签: ruby-on-rails enums ruby-on-rails-5 simple-form


    【解决方案1】:

    documentation 表示如下:

    ...

    最后,还可以使用哈希显式映射属性和数据库整数之间的关系:

    class Conversation < ActiveRecord::Base
      enum status: { active: 0, archived: 1 }
    end
    

    请注意,当使用数组时,从值到数据库整数的隐式映射是根据值在数组中出现的顺序得出的。在示例中,:active 映射到 0,因为它是第一个元素,:archived 映射到 1。一般情况下,i-th 元素映射到数据库中的i-1

    因此,一旦一个值被添加到枚举数组中,它在数组中的位置必须保持不变,新的值应该只添加到数组的末尾。要删除未使用的值,应使用显式哈希语法。

    在极少数情况下,您可能需要直接访问映射。映射通过具有复数属性名称的类方法公开,该方法以HashWithIndifferentAccess 形式返回映射:

    Conversation.statuses[:active]    # => 0
    Conversation.statuses["archived"] # => 1
    

    ...

    这意味着您可以通过 2 种方式中的一种来解决您的问题。

    1. <%= f.input_field :action, as: :hidden, value: 0 %>
      
    2. <%= f.input_field :action, as: :hidden, value: PortStock.actions[:buy] %>
      

    【讨论】:

    • 感谢您提供如此详细的解释。这非常有效(特别是第二个)。
    猜你喜欢
    • 2011-05-25
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2012-10-29
    • 2013-07-09
    • 2019-08-24
    相关资源
    最近更新 更多