Ruby on Rails: ссылка на метод post, но параметры в URL - PullRequest
12 голосов
/ 01 марта 2010

Я использую

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

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

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

Ответы [ 2 ]

25 голосов
/ 01 марта 2010

A link_to всегда помещает аргументы в строку запроса при создании HTML-ссылки в стиле get - даже если вы добавите :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 , чтобы узнать, как это сделать.

0 голосов
/ 08 августа 2014

Вы можете использовать приведенный ниже код, которому 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} %>

...