Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用Ruby Gem ActiveRecord、Sinatra和Postgres搜索表_Sql_Ruby_Postgresql_Activerecord_Sinatra - Fatal编程技术网

Sql 如何使用Ruby Gem ActiveRecord、Sinatra和Postgres搜索表

Sql 如何使用Ruby Gem ActiveRecord、Sinatra和Postgres搜索表,sql,ruby,postgresql,activerecord,sinatra,Sql,Ruby,Postgresql,Activerecord,Sinatra,如何使用Ruby Gem ActiveRecord、Sinatra和Postgres进行单词搜索 我的桌子看起来是这样的: create_table "posts", :force => true do |t| t.string "title" t.text "body" t.string "image_url" t.integer "user_id" t.datetime "created_at", :null => false t.dat

如何使用Ruby Gem ActiveRecord、Sinatra和Postgres进行单词搜索

我的桌子看起来是这样的:

create_table "posts", :force => true do |t|
  t.string   "title"
  t.text     "body"
  t.string   "image_url"
  t.integer  "user_id"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end
我试图在标题和正文字段中搜索关键词

使用我尝试过的
Post.find_by(body:“a”)
,但得到了一个空结果,其中我的body确实包含chara

我知道在Rails中,您会这样做:

  Post.where(["body LIKE :tag", {:tag => word}])

但我不知道如何使用Sinatra和Postgres实现同样的效果。

看看tsearch for Postgres

这是一个非常简单的搜索。有很多选项可供选择,例如,标题中的匹配权重大于正文中的匹配权重

您将向表中添加一个向量列:

 ALTER TABLE posts ADD COLUMN vector tsvector;
然后

 UPDATE posts SET vector=('default',coalesce(title,'') ||' '|| coalesce(body,''));
 VACUUM FULL ANALYZE;
然后您可以查询:

 SELECT * FROM posts WHERE vector @@ to_tsquery('default', 'Test | Zeppelin');

无法找到执行此任务的方法,但是,使用ActiveRecord Gem运行原始SQL确实解决了问题:

Post.find_by_sql("SELECT * FROM posts WHERE title LIKE '%word%' OR body LIKE '%word%';")

希望它能帮助某些人…

到目前为止,您的尝试采取了什么形式?请张贴代码,即使它是不完整的,并显示您被卡住的地方。“这让我更好地了解如何最好地帮助你。”尼尔·斯莱特我更新了我的问题。希望它能显示我所做的尝试。谢谢约翰。展望未来,但我试图避免在我的应用程序中添加更多的gem。它实际上不是gem,而是postgres的扩展。可能有gem包装器,但我只是在安装扩展后使用了上面的原生SQL。tsearch有很多选择,它非常强大。谢谢。我会调查的