Как добавить скрытое поле в form_with?
Я пытаюсь добавить скрытое поле в
form_with
.
Вот 3 попытки (и результаты / сообщения об ошибках)
Первая попытка
Источник: https://guides.rubyonrails.org/form_helpers.html
<% = hidden_field_tag (: parent_id, "5")%>
Поэтому я стараюсь:
<%= form_with(model: @message, method: :post) do |f| %>
<%= f.label :body %>
<%= f.text_area :body %>
<%= f.hidden_field_tag :user_id, current_user.id %>
<%= f.submit "Send", class: "btn btn-primary" %>
<% end %>
Вторая попытка
Источник: https://api.rubyonrails.org/v6.0.3/classes/ActionView/Helpers/FormHelper.html#method-i-hidden_field
Пример: hidden_field(:signup,:pass_confirm)
Поэтому я пытаюсь
<%= f.label :body %>
<%= f.text_area :body %>
<%= f.hidden_field :user_id, current_user.id %>
<%= f.submit "Send", class: "btn btn-primary" %>
<% end %>
но
Третья попытка
Это идет дальше, чем две другие попытки, потому что, по крайней мере, загружается представление представления, а не возникает ошибка.
<%= form_with(model: @message, method: :post) do |f| %>
<%= f.label :body %>
<%= f.text_area :body %>
<%= f.hidden_field user_id: current_user.id %>
<%= f.submit "Send", class: "btn btn-primary" %>
<% end %>
Но отправляемый параметр
Unpermitted parameter: :{:user_id=>21}
т.е. он содержит некоторые лишние знаки препинания, которых он не должен содержать (я думаю, что это был вложенный хеш или что-то в этом роде?)
2 ответа
У вас есть синтаксис ошибки. Если вы хотите передать значение в скрытое поле с помощью параметра:value.
<%= f.hidden_field :user_id, :value => current_user.id %>
Вот что сработало
<%= f.hidden_field :user_id, value: current_user.id %>
т.е.
<%= form_with(model: @message, method: :post) do |f| %>
<%= f.label :body %>
<%= f.text_area :body %>
<%= f.hidden_field :user_id, value: current_user.id %>
<%= f.submit "Send", class: "btn btn-primary" %>
<% end %>
где
:user_id
это имя параметра (измените на имя вашего параметра)value:
просто говоритform_with
значение будет следующим (т.е. не меняйте это)current_user.id
фактическое значение (изменить на свое значение)
На основании этого ответа