Ruby on Rails: как добавить дополнительные параметры в button_to:back?

Я делаю проект Rails для класса, в котором пользователь может ввести поисковый запрос, отображаются результаты (изображения), затем пользователь может щелкнуть изображение, чтобы получить его увеличенную версию.

На странице с большей версией у меня есть button_to :back.

<%= button_to "Back", :back %>

Но когда я нажимаю кнопку, страница результатов изображений, на которую он возвращается, показывает изображения по умолчанию, а не те, которые были возвращены в результате поиска. Мне нужно иметь возможность передать params[:search_term] обратно на предыдущую страницу (поскольку без значения :search_term возвращаются изображения по умолчанию).

Я пробовал это:

<%= button_to "Back", :back, :search_term => params[:search_term] %>

И при просмотре источника страницы, похоже, он должен передать параметр обратно:

   <form action="http://localhost:3000/albums/7/add" class="button_to" method="post">
   <div>
   <input search_term="puppy" type="submit" value="Back" />
   <input name="authenticity_token" type="hidden" value="lkjsakvgjwhatever" />
   </div></form>

Токен подлинности возвращается обратно, а мой search_term — нет.

РЕДАКТИРОВАТЬ:

Вот вид:

<%= image_tag("http://farm#{@pic["farm"]}.staticflickr.com/#{@pic["server"]}/#{@pic["id"]}_#{@pic["secret"]}_c.jpg") %>
<br><br>
<%= @pic["title"] %>'

<br><br>
<br><br>

<%= button_to "Back", :back, {:search_term=> params[:search_term]} %>

person wolf2600    schedule 08.12.2012    source источник
comment
Посмотрите api.rubyonrails.org/classes/ActionView/Helpers /, я раньше не использовал button_to, но посмотрите примеры и попробуйте использовать путь, что-то вроде back_path(params[:search_term]) и добавить маршрут с совпадением   -  person pablomarti    schedule 09.12.2012
comment
Кроме того, в настройках вы можете передать что-то вроде {:data =› :search_term=› params[:search_term]} для дополнительных атрибутов.   -  person pablomarti    schedule 09.12.2012


Ответы (3)


Вы должны изменить действие формы. Что-то вроде этого

<%= form_for(@model, :url => 'YOURURL',  :method => 'get') do %>
person Jean    schedule 08.12.2012
comment
Нет возможности просто добавить параметры к button_to? - person wolf2600; 09.12.2012
comment
можно вставить вид, пожалуйста - person Jean; 09.12.2012
comment
А при просмотре одной картинки такие параметры: {pic=›{farm=›9, id=›8254283877, isfamily=›0, isfriend=›0, ispublic=›1, owner=›26742588@N04, secret =›2e1e383879, server=›8211, title=›OH HEY!}, search_term=›puppy, action=›single, controller=›public_pages} - person wolf2600; 09.12.2012
comment
Поэтому я просто хочу взять params[:search_term] и передать его обратно при нажатии кнопки «Назад». - person wolf2600; 09.12.2012
comment
Извините, чувак, я думаю, вам нужно создать link_to что-то вроде этого ‹%= link_to Back , :back %› и оформить ссылку как кнопку, потому что я не уверен, что вы можете сделать это без javascript - person Jean; 09.12.2012

Используйте параметр params, чтобы добавить хэш значений в качестве скрытых полей:

= button_to "Back", :back, params: { search_term: params[:search_term] }

Будет производить:

<form action="/back" class="button_to" method="post">
    <div>
        <input type="submit" value="Back" />
        <input name="authenticity_token" type="hidden" value="uSCQbSaZdbIrTD2Z2FA0FQNe5CF+tK/jViInc1b7Kb0=" />
        <input name="search_term" type="hidden" value="whatever" />
    </div>
</form>
person Matt Gibson    schedule 08.06.2014

Как я знал, button_to "Back", :back будет кодом javascript, например: javascript:history.back(), поэтому вам следует определить обратный URL-адрес самостоятельно, а не использовать :back по умолчанию для UrlHelper.

person An Nguyen    schedule 09.12.2012