Как я могу скрыть параметры в URL представления? - PullRequest
0 голосов
/ 12 февраля 2019

Я передаю идентификатор изменения в качестве параметра с link_to:

<%= link_to 'Change', my_service_path(change: '1234567890'), method: :get%>

В контроллере у меня есть:

def my_action
   if params[:change]
     ...
     params.delete :change
end

Нокогда отображается view, я все еще вижу <view url>?change=1234567890

Как мне предотвратить отображение ?change=1234567890 в URL?

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

То, что вы пытаетесь сделать, «Изменить», говорит мне, что вы пытаетесь изменить состояние ресурса.В RESTful дизайне вы должны быть PATCH ing, а не GET 'ing.

Чтобы скрыть параметры, нужно создать форму, поместить change в скрытое поле и отправить форму в виде запроса PATCH, используя button_tag.

In.Тонкий, он будет выглядеть так:

= form_tag(url: my_service_url, method: :patch) do
  = hidden_field_tag(:change, "123456789")
  = submit_tag("Change")

На вашем сайте он будет выглядеть как обычная ссылка - но вместо этого вы указываете серверу Rails РЕДАКТИРОВАТЬ ресурс, а не ПОЛУЧАТЬ его.

0 голосов
/ 12 февраля 2019

, чтобы ответить на ваш вопрос в комментариях:

Как использование POST или формы предотвратит показ параметров запроса в> URL?

Если вы отправите запрос POST, ваш запрос также будет иметь тело.Таким образом, в запросе GET по вашей ссылке будет отправлена ​​информация об изменении через URL.В запросе POST (используйте button_to или форму) он будет отправлен через тело и не будет отображаться в URL.Затем вы все равно можете получить к нему доступ через параметры

0 голосов
/ 12 февраля 2019

Это потому, что params является экземпляром ActionController::Parameters, который был специально создан, потому что люди рассматривали объект params как хеш, как вы пытаетесь это сделать.

как @arieljuodРекомендуется преобразовать маршрут / ссылку, чтобы использовать запрос POST вместо запроса GET.Таким образом, параметры будут отправляться вместе с заголовками HTTP, а не отображаться в строке URL в виде строки запроса.

Так в вашем случае:

<%= link_to 'Change', my_service_path(change: '1234567890'), method: :post %>

... и сделатьуверен, что ваш маршрут настроен для ответа на POST запрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...