У меня есть простая форма для создания новой модели. Модель имеет атрибут panel
, установленный в контроллере. Я думаю, что это не должно иметь значения, но panel
- это перечисление.
В представлении я создаю следующую форму (дополнительные атрибуты опущены, поскольку не имеют отношения к проблеме)
При попытке отправив эту форму, я получаю ошибку, которая имеет смысл ...
ArgumentError ('TfVtJbT4RBcPdCCqrkap + dA8uhJvotCH02 + Isxx9ACmI2a9hcp4dOEszqztFy5A8pfIxex * * * * 10 *
Я пытался явно указать значение в форме, но это не меняет созданный HTML и, таким образом, все еще имеет ту же проблему.
<%= form_with model: @order do |f| %>
<%= f.hidden_field :panel, value: @order.panel %>
<% end %>
Обходное решение
Единственное, что работает до сих пор, - это создайте text_field
и установите его скрытым
<%= form_with model: @order do |f| %>
<%= f.text_field :panel, value: @order.panel, hidden: true %>
<% end %>
Это создает правильное значение:
<input value="sport" type="text" name="order[panel]" id="order_panel" hidden="hidden">
Это правильное способ сделать это ? Почему hidden_field
не работает должным образом? Чего мне не хватает?
Это новейшая версия Ruby на Rails (Rails 6.0.2.1).
CSP
При дальнейшем исследовании кажется, что это как-то связано с политикой безопасности контента и Turbolinks и / или U JS
Это мой CSP:
Rails.application.config.content_security_policy do |policy|
policy.default_src :self, :https
policy.font_src :self, :https, :data
policy.img_src :self, :https, :data
policy.object_src :none
policy.script_src :self, :https
policy.style_src :self, :https, :unsafe_inline
policy.connect_src :self, :https, "http://localhost:3035", "ws://localhost:3035" if Rails.env.development?
end
# If you are using UJS then enable automatic nonce generation
Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
# Set the nonce only to specific directives
Rails.application.config.content_security_policy_nonce_directives = %w(script-src)
# Rails.application.config.content_security_policy_report_only = true
Я заметил, что иногда, при навигации, браузер фактически перемещается к ссылка вместо Turbolink'ов, выполняющих свою работу (хотя в этих случаях не регистрируется нарушение CSP), где в том же случае без NO CSP Turbolinks работают как положено.
Я включил свой Javascript с nonce: content_security_policy_nonce
<%= javascript_pack_tag 'application', nonce: content_security_policy_nonce, 'data-turbolinks-track': 'reload' %>
Если я удалю nonce: content_security_policy_nonce
здесь, Turbolinks, похоже, снова будут работать как ожидалось ...