2010-04-28 2 views
0

Я боролся с проблемой в Rails в течение нескольких дней и до сих пор не смог найти решение. Не могли бы вы мне помочь?Как использовать form_tag для обновления параметров

Проблема: у меня есть окно поиска, в которое помещается запись: search_string в структуре params. Для этого я использую form_tag, и он отлично работает.

<% form_tag :controller=> 'items', :action => 'find' do %> 
    <%= text_field_tag :search_string, params[:search_string] %> 
<% end %> 

Проблема заключается в том, когда я хочу добавить и обновить другие Params ключ-значение (в другом виде), например: датой_начала, чтобы отфильтровать результат SEARCH_STRING. Вот код отрезала, что я использую в представлении:

<% form_tag :controller=> "items", :action => "find", :params => params do %> 
    <%= hidden_field_tag :date_start, '2010-04-01' %> 
    <%= submit_tag 'April' %> 
<% end %> 

<% form_tag :controller=> "items", :action => "find", :params => params do %> 
    <%= hidden_field_tag :date_start, '2010-03-01' %> 
    <%= submit_tag 'March' %> 
<% end %> 

Когда я первый нажмите на «Апрель» кнопку отправки, то PARAMS правильно передается в контроллер (то есть является PARAMS [: start_date] = 'Апрель'). Однако, когда я пытаюсь нажать кнопку «Марш» после этого, параметры [: start_date] не обновляются. Я определенно думаю, что это глупая ошибка новичков, но я не могу понять, как правильно использовать form_tag. Не могли бы вы сказать мне, что я что-то делаю? В противном случае, не могли бы вы посоветовать мне, который является лучшим способом обновить параметры с помощью form_tag? Заранее большое спасибо.

Микель

+0

Вы ищете start_date или date_start? – tadman

ответ

0

Что вы можете сделать, это вместо того, чтобы принудительно объединить параметры, что-то вдоль линий:

<% form_tag :controller=> "items", :action => "find", :params => params.merge(:date_start => '2010-03-01') do %> 
    <%= submit_tag 'March' %> 
<% end %> 

Существует вероятность того, что вы неосторожно представление двух из того же параметра и первый из них выбирается, но поскольку «первый» не определен четко, вы можете получить противоречивые результаты.

Посмотрите в своем файле журнала, чтобы узнать, какие параметры получены от двух форм.

+0

Уважаемый тадман, ваши советы работают фантастически! большое спасибо! Интересно, однако, если есть какие-то «лучшие практики» для решения вопроса о передаче большого количества пар ключ-значение из HTTP-запроса в HTTP-запрос. Является ли использование параметров (например, я делаю для этого приложения) наилучшим образом? – mgfernan

+0

Иногда вам нужно преобразовать ваши параметры в скрытые поля, хотя я не нашел способ сделать это автоматически. Технически вы хотите исключить «контроллер», «действие» и «формат» из переданных параметров, но это не всегда легко выполняется. Что вы можете сделать, это написать вспомогательный метод, который обрабатывает повторное кодирование параметров между запросами. – tadman