我在Rails中做了一个简单的搜索表单。Rails:找不到匹配结果时返回所有对象
def self.search(query)
where("sequence like ? or content LIKE ? ", "%#{query}%", "%#{query}%")
end
问题是,当没有找到结果时,它将返回一个空数组。
我该如何处理no result found
的情况?如何显示notice
或返回.all
?
我在Rails中做了一个简单的搜索表单。Rails:找不到匹配结果时返回所有对象
def self.search(query)
where("sequence like ? or content LIKE ? ", "%#{query}%", "%#{query}%")
end
问题是,当没有找到结果时,它将返回一个空数组。
我该如何处理no result found
的情况?如何显示notice
或返回.all
?
我会离开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 ..
简单的解决办法是只检查结果
def self.search(query)
result = where("sequence like ? or content LIKE ? ", "%#{query}%", "%#{query}%")
if result.blank?
return all
else
return result
end
end
我可能会做到这一点:
def self.search(query)
result = where("sequence like ? or content LIKE ? ", "%#{query}%", "%#{query}%")
result.any? ? result : all
end
注意,这是TJ的答案与简洁起见稍作修改。