2014-02-26 53 views
0

我在Rails中做了一个简单的搜索表单。Rails:找不到匹配结果时返回所有对象

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

问题是,当没有找到结果时,它将返回一个空数组。

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

回答

2

我会离开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 .. 
2

简单的解决办法是只检查结果

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

我可能会做到这一点:

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

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

相关问题