将嵌套资源添加到搜索结果

Adding Nested Resources to Search Results

我正在创建一个 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

articles_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

这允许我搜索所有主要资源,但不包括搜索结果中的嵌套资源。有没有办法将这些资源包含在同一个函数中?

您需要进行一些连接,并定义将相关连接信息传递到搜索方法的语法。

这会很快变得复杂,我强烈建议您不要重新发明轮子并使用现有的解决方案,例如 ransack。这会让你做类似

的事情

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

其中,在此示例中,Author 是它自己的模型,与 Article 相关联,并且包含字段 name.

它与视图和表单的搭配也非常好,因此您可以非常轻松地实现搜索表单,而无需手动将所有内容键入正确的关联和字段。

(就我个人而言,我不喜欢他们的连接语法,但它完成了工作。)