Передать параметры в Link_to - PullRequest
       28

Передать параметры в Link_to

12 голосов
/ 21 февраля 2012

Я бы хотел передать параметр через link_to метод в Rails.Я знаю, что есть способ сделать это через URL, но я действительно не хочу этого делать.Есть ли способ передать параметр через ссылку, не добавляя его в саму ссылку?

Я знаю, что в PHP вы можете публиковать, а затем получать это значение, используя переменную post.Есть ли что-то похожее в Rails?

Ответы [ 4 ]

11 голосов
/ 21 февраля 2012

link_to подпись выглядит следующим образом:

link_to(body, url_options = {}, html_options = {})

Итак, POST будет выглядеть (скажем, вы хотите, чтобы данные пользователя POST):

link_to "Link text", some_path(:foo => "bar", :baz => "quux"), user: @user, :method => :post

Данные пользователя могут быть получены в контроллере с помощью params[:user]

5 голосов
/ 24 июля 2013

Вот как вы можете передать параметр через метод link_to, чтобы, скажем, создать новый объект с переданным параметром.Эта стратегия позволит вам передавать переменные между действиями в вашем контроллере и создавать объекты с предопределенными атрибутами:

Скажем, в вашем представлении show у вас есть переменная с именем @ foo что вы хотите передать своему новому действию контроллера.В этом случае в вашем представлении show вы можете иметь

<%= link_to "Link Text", new_widget_path(:foo => @foo) %>

, который будет хранить @foo в params [: foo], что позволит вам использовать params [: foo] в вашемконтроллер.На какое действие контроллера вы обращаетесь, зависит от * new_widget_path *.В этом случае вы получаете указание на действие new в WidgetController.

Нажатие на Текст ссылки направит Rails к действию new ваш WidgetController.Вы можете иметь

def new
  @widget = Widget.new(:foo => params[:foo])
end

Затем в вашем new.html.erb файле просмотра вы можете разрешить пользователю создавать новый объект Widget с этим предопределенным fooАтрибут уже заполнен через скрытое поле формы:

 <%= form_for(@widget) do |f| %>
  <%= f.label :other_attribute %><br />
  <%= f.text_field :other_attribute %>
  <%= f.hidden_field :foo %>
  <%= f.submit %>
<% end %>

Позволяет пользователю создать новый виджет с уже заполненным атрибутом foo !

3 голосов
/ 21 февраля 2012

Передача информации через веб-запрос может быть осуществлена ​​либо по URL-адресу: http://example.com/foo?bar=blah в GET-запросе, который выполняет link_to, либо с помощью операции POST, для которой обычно требуется форма. Форма может иметь скрытые элементы, если вы просто хотите кнопку отправки:

<form method="POST" action="http://example.com/foo">
  <input type="hidden" name="bar" value="blah">
  <input type="submit">
</form>

Существуют различные помощники рельсов, которые могут помочь при создании формы.

Наконец, если вы действительно хотите ссылку, вы можете либо стилить эту кнопку в стиле CSS, либо использовать javascript для просмотра ссылки, а затем ПОСТАВИТЬ информацию. (метод, который опубликовал Симон Багреев, делает это с помощью JavaScript)

1 голос
/ 21 февраля 2012

Что за параметр?Если это ключ для запроса GET, соглашение будет диктовать использование URL (например, params [: id] или переменная пути активной записи).Если вы хотите отправить что-то, вы должны использовать форму.В противном случае вы могли бы написать вспомогательный метод для установки переменной сеанса или чего-то подобного, но подумайте о своей архитектуре и о том, что вы семантически пытаетесь сделать, и я уверен, что кто-то здесь может вам помочь.

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