Почему поле "line_type_eq" доступно, на мой взгляд, с помощью f.object.line_type_eq, а поле с именем "selected_eq" всегда возвращает nil? - PullRequest
0 голосов
/ 10 октября 2019

Я использую Ransack для поиска в базе данных с несколькими полями. Со стороны представления, я предварительно заполняю значения полей по умолчанию в моей форме поиска предыдущим запросом, который доступен в представлении, из контроллера как @q, используя search_form_for @ q.

На протяжении всегоформа, это работает успешно, но моё поле с именем delete_eq всегда возвращает nil, когда я пытаюсь получить к нему доступ с помощью f.object.deleted_eq, чтобы проверить значение. Это несмотря на то, что другие значения запроса поля возвращаются правильно в том же месте, используя тот же формат, например, fobject.line_type_eq.

Является ли «удалено» специальным именем поля в Ransack? Все поля в моем запросе работают должным образом в контроллере, чтобы вернуть правильные результаты.

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

Правка для получения дополнительной информации: Rails 5.2.1, Ransack 2.0.1

Удалено_eq - это выпадающий список, выполненный с помощью f.select с описательными именами текстовых опций, которые сопоставлены с «true», «false» и «». Так что да, в конечном итоге я считаю, что Рэнсак воспринимает это как логическое значение.

<%= f.select :deleted_eq, options_for_select([['Active Records', 'false'],
['Deleted Records Only', 'true'], ['Active and Deleted Records', '']],
f.object.deleted_eq || 'false'), {}, { :class => 'form-control',
:onChange => "searchOnchange();" }  %>

1 Ответ

0 голосов
/ 10 октября 2019

Понял это.

Похоже, что delete_eq может быть nil, если задано пустое значение. Больше всего мне повезло с адаптацией другого решения, которое я нашел в Интернете, например:

<%= f.select :deleted_eq, [['Active Records', 0], ['Deleted Records', 1]],
   { include_blank: 'All Records', selected: params[:q] ? params[:q][:deleted_eq] : 0 },
   {:class => 'form-control', :onChange => "searchOnchange();" } %>

Обидно, что опция include_blank («Все записи») всегда должна отображаться как первый элемент в раскрывающемся списке, но так какЯ могу выбрать то, что начинается, и я могу выбрать «Активные записи», это не конец света.

...