Как указать конкретное значение перечисления в качестве скрытого поля с помощью простой формы? - PullRequest
0 голосов
/ 27 мая 2018

У меня есть модель PortStock.rb, в которой есть следующее перечисление:

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

Что я хочу сделать - это частичное заполнение формы, я хочу включить PortStock.buy или PortStock.sell какскрытое поле (это будет определяться параметрами, отправленными с формой).

Я не знаю, что добавить в атрибут value: моего input_field ниже.

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

Мысли

1 Ответ

0 голосов
/ 28 мая 2018

Документация гласит следующее:

...

Наконец, также возможно явно отобразить связь между атрибутом и целым числом базы данных с помощьюhash:

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

Обратите внимание, что при использовании массива неявное отображение значений в целые числа базы данных выводится из порядка появления значений в массиве.В этом примере :active отображается на 0 как первый элемент, а :archived отображается на 1.Как правило, i -й элемент сопоставляется с i-1 в базе данных.

Поэтому, как только значение добавляется в массив перечисления, его позиция в массиве должна поддерживаться, и новые значенияследует добавлять только в конец массива.Чтобы удалить неиспользуемые значения, следует использовать явный синтаксис хеша.

В редких случаях вам может потребоваться прямой доступ к отображению.Отображения отображаются через метод класса с множественным именем атрибута, который возвращает отображение в HashWithIndifferentAccess:

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

...

Это означает, что вы можете решитьВаша проблема в 1 из 2 способов.

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