Здесь в ОП виден какой-то неправильный результат, поэтому следуйте приведенному ниже.
В запросе на соединение нет проблем, проблема в том, где view
& controller
Вам не нужно условие if search
, потому что у вас уже есть это в методе контроллера
def self.search(search)
joins(blob: :item).where("items.a ILIKE ?", "%#{search}%")
end
Смотрите, ключ ILIKE
работает только для PostgreSQL, если ваша база данных для разработки sqlite3
, тогда запрос будет выглядеть так же, как
joins(blob: :item).where("lower(items.a) LIKE (?)", "%#{search.downcase}%")
измените это на self.search
метод.
И в контроллер следуйте этому коду
if params[:search].present?
@collections = current_user.collections.search(params[:search]).order("created_at DESC")
else
@collections = current_user.collections.order("created_at DESC")
end
И текстовое поле меняется следующим образом
<%= text_field_tag :search, value: params[:search] %>
Таким образом, форма будет выглядеть так
<%= form_tag collections_path, method: 'get' do %>
<%= text_field_tag :search, params[:search] %>
<% end %>
Надеюсь, это сработает.