如何使用简单表单将特定枚举值指定为隐藏字段?

时间:2018-05-27 07:43:58

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

我有一个PortStock.rb模型,其中包含以下枚举:

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

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

我不知道下面value:的{​​{1}}属性中包含哪些内容。

input_field

思想?

1 个答案:

答案 0 :(得分:2)

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
     

...

这意味着您可以通过两种方式之一解决问题。

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