Rails:找不到匹配结果时返回所有对象

时间:2014-02-26 15:29:33

标签: ruby-on-rails

我在Rails中创建了一个简单的搜索表单。

  def self.search(query)
    where("sequence like ? or content LIKE ? ", "%#{query}%", "%#{query}%")
  end

问题在于,当找不到结果时,它将返回一个空数组。

如何处理no result found情况?如何显示notice或返回.all

3 个答案:

答案 0 :(得分:3)

我会按原样保留search方法。它的意思很明确:查找给定查询的数据。

然后在你的控制器或视图中我会处理没有找到结果的情况。

一般来说,如果我找东西,但没有结果,我宁愿得到通知,然后显示所有结果(没有任何提及),这会让我感到困惑。

所以你可以在控制器中处理它,例如:

@posts = Post.search(params[:search]
if @posts.empty?
  flash[:notice] = "No results found for #{params[:search]}"
  @posts = Post.all 
end  

但更简单的是,您在视图中处理此问题,如下所示:

<% if @posts.empty? %>
  <p>No results found</p>
<% else %>
  <table>
    .. render your table with results as before ..

答案 1 :(得分:2)

最简单的解决方案就是检查结果

def self.search(query)
  result = where("sequence like ? or content LIKE ? ", "%#{query}%", "%#{query}%")
  if result.blank?
    return all
  else
    return result
  end
end

答案 2 :(得分:0)

我可能会这样做:

  def self.search(query)
    result = where("sequence like ? or content LIKE ? ", "%#{query}%", "%#{query}%")
    result.any? ? result : all
  end

请注意,这是TJ的答案,为了简洁起见稍作修改。