将嵌套资源添加到搜索结果
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
.
它与视图和表单的搭配也非常好,因此您可以非常轻松地实现搜索表单,而无需手动将所有内容键入正确的关联和字段。
(就我个人而言,我不喜欢他们的连接语法,但它完成了工作。)
我正在创建一个 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
.
它与视图和表单的搭配也非常好,因此您可以非常轻松地实现搜索表单,而无需手动将所有内容键入正确的关联和字段。
(就我个人而言,我不喜欢他们的连接语法,但它完成了工作。)