ActiveRecord模糊搜索

时间:2016-04-06 02:38:43

标签: ruby-on-rails ruby postgresql activerecord

我希望执行搜索以找到与此类似的对象:

echo '<table>'; $stmt = $connection->prepare("SELECT B FROM TABLE ORDER BY B DESC"); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($b); while($stmt->fetch()){ echo '<tr> <td>'.$b.'</td>'; $stmt2 = $connection->prepare("SELECT A FROM TABLE GROUP BY A ORDER BY A"); $stmt2->execute(); $stmt2->store_result(); $stmt2->bind_result($a); while($stmt2->fetch)){ $stmt3 = $connection->prepare("SELECT score FROM TABLE WHERE A = ? AND B = ?"); $stmt3->bind_param("ii", $a, $b); $stmt3->execute(); $stmt3->store_result(); if($stmt3->num_rows > 0){ $stmt3->bind_result($score); $stmt3->fetch(); echo '<td>'.$score.'</td>'; } else { echo '<td>NULL</td>'; } $stmt3->close(); } /* END OF WHILE LOOP OF SECOND STATEMENT */ $stmt2->close(); echo '</tr>'; /* END OF ROW */ } /* END OF WHILE LOOP */ $stmt->close(); echo '</table>';

使用这样的搜索:

Object(id: 1, example: "abc")

但如果我的搜索字符少于我的对象,则只能使用上面的示例,而不是更多。

2 个答案:

答案 0 :(得分:2)

我认为应该是

params[:search] = "abcdef"
Object.where("example LIKE ?", "%#{params[:search]}%")

也可能希望使用ilike进行不区分大小写的搜索(如果您正在使用postgres)

答案 1 :(得分:0)

通过fuzzily宝石,您可以对已适当检测的ActiveRecord模型进行模糊搜索。

  

在成堆的字符串中模糊地查找拼写错误,前缀或局部的针。它是Rails的一种基于Trigram的快速,基于数据库的模糊字符串搜索/匹配引擎。

一旦安装了gem,就可以按以下方式检测模型:

class MyStuff < ActiveRecord::Base
  # assuming my_stuffs has a 'name' attribute
  fuzzily_searchable :name
end

然后您可以执行以下模糊搜索:

MyStuff.find_by_fuzzy_name('Some Name', :limit => 10)
# => records