根据输入参数构建SQL查询

时间:2019-03-14 03:35:26

标签: ruby

我正在构建一个SQL查询,并创建了一个执行方法以如下方式运行它:

module Helper
  module Action

    BASE_SQL_QUERY = 'SELECT a,b,c FROM SOME_TABLE'

    SELECT_QUERY = "#{BASE_SQL_QUERY}"

    def self.execute(action:, db_client:, data:)
      db_client.prepare(Helper::Count::SELECT_QUERY).execute
    end
  end
end

工作正常,我将拥有完全相同的模块,唯一的不同将在查询中。取而代之的是SELECT a,b,c,它将是SELECT count(*),其他所有内容都将相同。

在执行方法中,动作参数将具有我想action == 'read'SELECT a,b,caction == countSELECT count(*)的动作。

尝试执行的操作只有一个模块Action,并基于action值构建sql。有可能这样做吗?我尝试了一堆方法,例如创建方法并将操作传递给它,并尝试构建sql,但由于错误的常量值不能在方法中,因此出现了dynamic constant assignment错误。

是否可以根据操作值构建sql?

1 个答案:

答案 0 :(得分:0)

当然,任何现有的ORM都可以做到这一点-提供使用语言通用语法构建sql查询的接口。

除了大型且令人恐惧的功能齐全的ORM之外,还有一些宝石可以满足您的需求-查询构建。您可以检查它们的实施方式,并在那里借鉴一些想法(例如https://github.com/izniburak/qruby