Параметры передачи в Link_to
Я хотел бы передать параметр с помощью метода link_to
в Rails. Я знаю, что есть способ сделать это через URL-адрес, но я действительно не хочу этого делать. Есть ли способ передать параметр по ссылке, не добавляя его к самой ссылке?
Я знаю, что в PHP вы можете публиковать, а затем извлекать это значение, используя переменную post. Есть ли что-то подобное в Rails?
Ответы
Ответ 1
Подпись 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]
Ответ 2
Здесь вы можете передать параметр через метод link_to, чтобы, например, создать новый объект с переданным параметром. Эта стратегия позволит вам передавать переменные среди действий в вашем контроллере и создавать объекты с предопределенными атрибутами:
Говорите в своем представлении, у вас есть переменная @foo, которую вы хотите передать новому действию контроллера. В этом случае в вашем представлении просмотра вы можете иметь
<%= link_to "Link Text", new_widget_path(:foo => @foo) %>
который будет хранить @foo в параметрах [: foo], позволяя вам использовать params [: foo] в вашем контроллере. Какое действие контроллера, на которое вы направляете, зависит от * new_widget_path *. В этом случае вы будете перенаправлены на новое действие в WidgetController.
Нажав на текст ссылки, Rails направит новое действие вашего 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
Передача информации через веб-запрос может осуществляться либо по 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 для наблюдения за ссылкой, а затем POST info. (метод, опубликованный Саймоном Багреевым, делает это с помощью javascript)
Ответ 4
Какой параметр? Если это ключ для запроса GET, соглашение будет определять использование url (например, params [: id] или переменную пути активной записи). Если вы хотите POST что-то, вы должны использовать форму. В противном случае вы могли бы написать вспомогательный метод для установки переменной сеанса или чего-то еще, но подумайте о своей архитектуре и о том, что вы пытаетесь сделать семантически, и я уверен, что кто-то здесь может помочь вам.