我正在构建一个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,c
和action == count
做SELECT count(*)
的动作。
尝试执行的操作只有一个模块Action,并基于action值构建sql。有可能这样做吗?我尝试了一堆方法,例如创建方法并将操作传递给它,并尝试构建sql,但由于错误的常量值不能在方法中,因此出现了dynamic constant assignment
错误。
是否可以根据操作值构建sql?
答案 0 :(得分:0)
当然,任何现有的ORM都可以做到这一点-提供使用语言通用语法构建sql查询的接口。
除了大型且令人恐惧的功能齐全的ORM之外,还有一些宝石可以满足您的需求-查询构建。您可以检查它们的实施方式,并在那里借鉴一些想法(例如https://github.com/izniburak/qruby)