Подтвердить что ты не робот

Rails - что именно делает hidden_field и hidden_field_tag?

Я прочитал техническое определение hidden_fields, но не уверен, что он на самом деле делает. Я понимаю, что он позволяет передавать атрибут для определенных параметров. Например, если у вас есть богатая модель объединения, вы можете использовать hidden_field, чтобы назначить user_id атрибуту модели соединения для пользователя. Это правильно?

Если так, было бы лучше сделать это в форме или контроллере?

4b9b3361

Ответ 1

Оба эти метода являются помощниками для создания тега ввода HTML типа "hidden", и да, они используются для добавления параметров в запрос (обычно это форма POST). Действительно, параметром может быть любая часть информации, которую вы хотите отправить вместе с запросом. Однако будьте осторожны, так как скрытые поля легко подделываются.

Вот пример, который отправит идентификатор пользователя в скрытом поле

# Form
<%= form_tag foo_path do %>
  <%= hidden_field_tag "user_id", @user.id %>
  ....
  <%= submit_tag "Click Me" %>
<% end %>

# Controller
def foo
  # params[:user_id] is set with the value from the hidden field
  # Do useful stuff with the POST data
end

Пока вы можете передавать такие вещи, как user_id, как это, я считаю, что необходимость в этом редко. Если user_id всегда требуется для данной ситуации, вы можете использовать вложенные маршруты http://guides.rubyonrails.org/routing.html#nested-resources.

Ответ 2

Он будет генерировать скрытый тип поля ввода...

<input type="hidden" />

Это способ хранения информации, которую вы хотите отправить с формой, без видимого поля.

В документации :

hidden_field_tag 'tags_list' генерирует...
<input id="tags_list" name="tags_list" type="hidden" />

hidden_field_tag предназначен для использования без модели, тогда как hidden_field предназначен для использования в сочетании с вызовом form_for и моделью.

hidden_field(:signup, :pass_confirm) генерирует...
<input type="hidden" id="signup_pass_confirm" name="signup[pass_confirm]" value="#{@signup.pass_confirm}" />