Добавление вложенных ресурсов в результаты поиска - PullRequest
0 голосов
/ 12 октября 2018

Я создаю приложение rails, в котором реализована следующая функция поиска.

application.html.erb

<div class="searchbar">
  <%= form_tag(articles_path, :method => "get", id: "search-form") do %>
    <%= text_field_tag :search, params[:search], placeholder: "    Search", :class => "search_form"  %>
    <%= submit_tag "Search", :name => nil %>
  <% end %>
</div>

article.rb

def self.search(search)
    where("title LIKE ? OR creator LIKE ? OR description LIKE ?", "%#{search}%", "%#{search}%", "%#{search}%") 
end

article_controller.rb

def index
    @articles = Article.all
    if params[:search]
        @articles = Article.search(params[:search]).order("created_at DESC")
    else
        @articles = Article.all.order("created_at DESC")
    end
end

Это позволяет мне искать все первичные ресурсы, но не включает вложенные ресурсы в результаты поиска.Есть ли способ включить эти ресурсы в одну и ту же функцию?

1 Ответ

0 голосов
/ 12 октября 2018

Вам нужно сделать несколько объединений и определить синтаксис для передачи соответствующей информации о соединении в ваш метод поиска.

Это может довольно быстро усложниться, и я настоятельно рекомендую вам этого не делать.заново изобрести колесо и использовать существующее решение, такое как ransack .Это позволит вам делать такие вещи, как

Article.ransack(title_cont: "code", author_name_cont: "bob").result

, где в этом примере Author - это его собственная модель, связанная с Article и содержащая поле name.

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

(Лично я невлюблен в их синтаксис конкатенации, но он выполняет свою работу.)

...