我想知道是否可以获得一些重构帮助以使这个查询更简洁。
此查询的基本操作是它通过某些搜索词搜索所有help_documents。它会检查文档问题,内容及其所属的类别。
def self.search(text)
if text.blank?
latest
else
relation = sorted.joins(:category)
text.split(/\s/).each do |word|
relation = relation.where(
"lower(help_documents.question) like ? or lower(help_documents.content) like ? or lower(help_categories.name) like ?",
"%#{word.downcase}%", "%#{word.downcase}%", "%#{word.downcase}%"
)
end
relation
end
end
与在java / hibernate中执行此操作相比,这实际上看起来非常好。但我认为铁杆人们甚至可能有更性感的伎俩来完成同样的事情。例如,可能有一些我不知道的方法/对象已经做了这些类型的事情。
答案 0 :(得分:2)
我首先要删除所有的小写和小写调用。如果您使用的是mysql并且您的表是utf8,那么类似的将不区分大小写。这应该消除一些噪音,以便我们可以更多地看待问题。
此外,您可以在where:
中使用命名键relation.where("help_documents.question like :term, or help_documents.content like :term, or help_categories.name like :term", {:term => "%#{word}%"})
另外,你可能想看看squeel(http://metautonomo.us/projects/squeel/),它可以让你更进一步,并为你提供大量的语法糖。