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

Параметры передачи в Link_to

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

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

4b9b3361

Ответ 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 что-то, вы должны использовать форму. В противном случае вы могли бы написать вспомогательный метод для установки переменной сеанса или чего-то еще, но подумайте о своей архитектуре и о том, что вы пытаетесь сделать семантически, и я уверен, что кто-то здесь может помочь вам.