Проблема заключается в следующих строках:
В контроллере:
@search = CaseSearch.new(params[:search])
В case_search вы получаете доступ к params[:date_from]
и params[:date_to]
.
В представлении:
<%= text_field_tag 'Date from', @search.date_from %>
<%= text_field_tag 'Date to', @search.date_to %>
Из вышесказанного я предполагаю, что вы ожидаете, что params
будет иметь структуру:
{search: {date_from: 'value', date_to: 'value'}}
Это не 'Не отражается в форме.
Строка text_field_tag 'Date from'
сделает значение доступным под params['Date from']
в контроллере, что вам не нужно. Вместо этого измените представление на:
<%= text_field_tag 'search[date_from]', @search.date_from %>
<%= text_field_tag 'search[date_to]', @search.date_to %>
, чтобы оно соответствовало ожидаемой структуре.
В руководстве Обзор контроллера действий есть специальный раздел об этом:
params
ha sh не ограничивается одномерными ключами и значениями. Он может содержать вложенные массивы и хеши. Чтобы отправить массив значений, добавьте пустую пару квадратных скобок «[]» к имени ключа:
GET /clients?ids[]=1&ids[]=2&ids[]=3
Фактический URL-адрес в этом примере будет закодирован как «/ clients? Ids % 5b% 5d = 1 & ids% 5b% 5d = 2 & ids% 5b% 5d = 3 ", поскольку символы" ["и"] "не допускаются в URL-адресах. В большинстве случаев вам не нужно беспокоиться об этом, потому что браузер будет кодировать его за вас, а Rails будет декодировать его автоматически, но если вам когда-либо придется отправлять эти запросы на сервер вручную, вы должны иметь это в виду. .
Теперь значение params[:ids]
будет ["1", "2", "3"]
. Обратите внимание, что значения параметров всегда являются строками; Rails не пытается угадать или привести тип.
Значения, такие как [nil]
или [nil, nil, ...]
в params
, по умолчанию заменяются на []
из соображений безопасности. См. Руководство по безопасности для получения дополнительной информации.
Чтобы отправить ha sh, вы указываете имя ключа в скобках:
<form accept-charset="UTF-8" action="/clients" method="post">
<input type="text" name="client[name]" value="Acme" />
<input type="text" name="client[phone]" value="12345" />
<input type="text" name="client[address][postcode]" value="12345" />
<input type="text" name="client[address][city]" value="Carrot City" />
</form>
Когда это форма отправлена, значение params[:client]
будет { "name" => "Acme", "phone" => "12345", "address" => { "postcode" => "12345", "city" => "Carrot City" } }
. Обратите внимание на вложенный ha sh в params[:client][:address]
.
Объект params
действует как Ha sh, но позволяет вам взаимозаменяемо использовать символы и строки в качестве ключей.