Ruby on rails 使用单个搜索参数查询Rails和Postgresql中的多个表和列
我正在使用Rails和Postgresql数据库构建一个API。我有一个用户模型,用户表有3列,电子邮件,名称和城市 我想创建一个URL,允许用户在我的用户模型中搜索多个字段,例如,当用户在以下URL中搜索时:Ruby on rails 使用单个搜索参数查询Rails和Postgresql中的多个表和列,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我正在使用Rails和Postgresql数据库构建一个API。我有一个用户模型,用户表有3列,电子邮件,名称和城市 我想创建一个URL,允许用户在我的用户模型中搜索多个字段,例如,当用户在以下URL中搜索时: http://localhost:3000/search?term=foo 它在电子邮件、姓名和城市列中搜索术语“foo”,并返回所有匹配项。这类似于在iTunes商店中搜索() 到目前为止,我的问题是: SELECT email name city FROM use
http://localhost:3000/search?term=foo
它在电子邮件、姓名和城市列中搜索术语“foo”,并返回所有匹配项。这类似于在iTunes商店中搜索()
到目前为止,我的问题是:
SELECT
email
name
city
FROM
users
WHERE
email = '#{term}' OR
name = '#{term}' OR
city '#{term}';
这是可行的,但当您有很多记录时,速度太慢(>4000ms)。有人知道更好的SQL或Rails/ActiveRecord方法可以使这个查询更好吗?我已经为所有三列添加了索引
非常感谢 如果您计划将该代码用于生产目的,那么它是否可以使用?在查询字符串中进行标记,以避免SQL注入。与以下示例类似:
User.where("email = ? OR name = ? OR city = ?", params[:term], params[:term], params[:term])
您询问如何使事情变得更快,在这种情况下,数据库索引可能会起作用;所以您需要创建一个可以称为addIndex的
class AddIndexes < ActiveRecord::Migration
def change
add_index :users, :email
add_index :users, :name
add_index :users, :city
end
end
class AddIndexes
非常感谢您提出避免SQL注入的建议。至于添加索引部分,我已经在3列中添加了索引,但是对于一些查询来说仍然很慢(>4000ms)。我在这个表中有大约300万条记录,我想这可能太大了。@HarryWang使用批处理怎么样?我刚刚看了一下(对我来说也是一个新概念!),您可能会发现Rails强制转换也很有用,因此在使用批处理时,您可以使用id或批处理大小限制SQL条件下使用的用户数量。也许这可以加快速度。@HarryWang关于SQL,您还可以向数据库管理员的堆栈交换()询问如何使SQL更快地用于记录批处理。这很有帮助!谢谢!!