gpt4 book ai didi

ruby-on-rails - 如何包含自定义 SQL 函数

转载 作者:行者123 更新时间:2023-12-04 03:40:31 25 4
gpt4 key购买 nike

我正在使用 find_by_sql 来执行 SQL 查询。我希望能够使用 Soundex 和 Levenshtein,但为了使用 Levenshtein,我需要将该函数作为文件包含在内。

到目前为止,这是我的代码:

info = params[:email].split('@')
name = info[0]
domain = info[1]

levenshtein = File.open("./lib/assets/mysql-function-levenshtein.sql")

results = Domain.find_by_sql(
"" + levenshtein + "
SELECT *
FROM domains
WHERE domain = '" + domain + "'"
)

我不知道简单地将它包含在查询中是否有效。

什么是最好的实现?

顺便说一句,我要包含的文件是这样的: https://github.com/vyper/levenshtein-sql

最佳答案

首先,我认为您最好通过迁移在数据库中定义该函数,这样您就不必为每个要使用它的查询重新定义它:

class AddLevenShteinFunctionToDatabase < ActiveRecord::Migration
  def up
levenshtein = File.read("/path/to/levenshtein.sql")
    execute levenshtein
  end

def down
# maybe put some code here to delete the function
end
end

完成此操作后,您还可以向您的 Domain 模型添加一个范围来执行这些类型的查询:

scope :levenshtein, lambda {|s1, s2| select("levenshein(#{s1}, #{s2})") }

有了这个,你应该能够像这样写你的查询:

results = Domain.levenshtein("LEONARDO", "LEONARDU").where(:domain => domain)

关于ruby-on-rails - 如何包含自定义 SQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11500489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com