我在Rails中创建了一个简单的搜索表单。
def self.search(query)
where("sequence like ? or content LIKE ? ", "%#{query}%", "%#{query}%")
end
问题在于,当找不到结果时,它将返回一个空数组。
如何处理no result found
情况?如何显示notice
或返回.all
?
答案 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的答案,为了简洁起见稍作修改。