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

Ruby on Rails: ссылка на использование метода post, но параметры указаны в URL-адресе

Я использую

link_to 'My link', path(:arg1 => session[:arg1], :arg2 => session[:arg2],:arg3 => anyobject.id), :method => :post

но сгенерированная HTML-ссылка включает в себя (arg1, arg2, arg3) параметры URL.

Как удалить их? Я что-то пропустил в документации?

4b9b3361

Ответ 1

A link_to всегда будет помещать аргументы в строку запроса, поскольку он создает ссылку HTML-стиля get-style - даже если вы поместите :method => :post, который просто добавляет дополнительный ( "специальный" ) аргумент _method.

Я думаю, что вы действительно хотите, это ссылка button_to, которая превратит ее в своего рода форму-сообщение. Он работает так же, но вместо него говорит button_to (например, button_to 'My link', path(:params => :go_here)). Недостатком является то, что он будет выглядеть как кнопка. Но вы можете дать ему класс CSS (например, "unbutton" ), а затем изменить стиль на этом CSS-классе, чтобы он не выглядел как кнопка.

В качестве альтернативы, если вы действительно хотите, чтобы на самом деле не было никакого params, переданного контроллеру... тогда просто не включайте их при создании своей ссылки (например, link_to "My link" path - нет необходимости в :post, если вы не хотите публиковать сообщения params).

Наконец, если вы хотите, чтобы params стал частью URL-адреса (например, stuff/[param_1]/more_stuff/[param_2] и т.д.), вам необходимо обновить маршруты, чтобы включить эти параметры в качестве параметров. Посмотрите раздел маршрутизации rdoc, чтобы узнать, как это сделать.

Ответ 2

Вы можете использовать ниже код, который rails.js нуждается в методе данных для переключения в пост-режим в Ajax.

<%= link_to '<button id="print" type="submit" class="btn">Print</button>'.html_safe, { controller: :lots, id: @lot.containername, action: "print_#{print_template}", remote: true }, {'data-method' => :post} %>