Как создать форму и сохранить существующие параметры

#ruby-on-rails #ruby-on-rails-6 #actionview

#ruby-on-rails #ruby-on-rails-6 #actionview

Вопрос:

Я могу ссылаться на ту же страницу, сохраняя текущие параметры (за исключением параметра страницы) с помощью этого

 <%= link_to 'test', request.params.except(:page) %>
  

Возможно ли это сделать с помощью формы? Я думал, что это сработает, но это не сохраняет параметры

 <%= form_with(path: request.params.except(:page), method: "get", local: true) do %>
  

это тоже не сработало

 <%= form_with(path: params.except(:page), method: "get", local: true) do %>
  

Комментарии:

1. Что именно вы пытаетесь сделать?

2. У меня есть следующая форма поиска, которая отлично работает, но мне нужно сохранить текущие параметры <%= form_with(path: request.fullpath, method: "get") do %><%= text_field_tag :query, params[:query] %><% end %>

3. формы обычно включают объекты, которые обычно восстанавливаются из параметров, поэтому кажется, что вы пытаетесь изобрести колесо, которое не нужно изобретать заново. Почему бы просто не использовать form_with(object ….) ?

4. не могли бы вы сообщить мне, что вы подразумеваете под form_with(object)? Мой Rails fu недостаточно силен, чтобы знать, что делать дальше с этим

5. guides.rubyonrails.org/form_helpers.html

Ответ №1:

Я не смог передать параметры в URL с формой. Это кажется немного странным, но следующее работает, отправляя параметры в виде скрытых полей. Например, если вы хотите сохранить параметры с именами «состояние» и «порядок» в вашей форме поиска, вы можете сделать это. Это безопаснее, чем то, что я пробовал выше, поскольку оно явно вносит в белый список разрешенные параметры (вместо удаления нежелательных параметров, например, «страница» выше)

 <% request.params.slice("state", "order").each do |key, value| %>
  <%= hidden_field_tag key, value %>
<% end %>