我正在使用 Ruby on Rails。
我有一个 Controller ,它向 API 发出后续请求,该 API 需要插入一些值的大型数组参数。
我使用如下所示的方法生成此参数:
def generate_params(search)
[
{
script_score: {
query: {
neural: {
passage_embedding: {
query_text: search,
k: 100
}
}
},
script: {
source: '_score * 1.5'
}
}
},
{
script_score: {
query: {
multi_match: {
query: search,
fields: %w[field_a field_b field_c field_d]
}
},
script: {
source: '_score * 1.7'
}
}
}
]
end
search
参数被插入到从该方法返回的数组中。
我的问题是:在 Ruby/Ruby on Rails 中为此类大型对象定义模板的最佳实践是什么?
从示例中可以看出,其中 95% 是静态模板语法,只有 2 个值由变量填充。
我想将方法大小减小到尽可能小,并且想知道是否有某种方法可以将此数组定义为方法外部的模板?具体而言,Ruby 中的最佳实践方法是什么?
最佳答案
不确定是否存在商定的最佳实践,但我经常看到此类内容存储在 YAML 文件中。
因此,如果您使用您的配置创建 YAML 文件,您可以执行类似以下操作:
require 'yaml'
my_configuration = YAML.load_file('path_to_yaml_file.yml')
这将允许您像哈希一样对待 YAML 文件的值:
my_configuration[:script_score][:query][:multi_match][:query] = 'some_value_or_method_call'
您可以将其转储到数组中或您需要用它执行的任何其他操作 - 重点是您可以通过 YAML 文件加载大部分属性并根据需要修改对象/哈希。
或者,您可以将相同的属性存储在模块内的常量中,加载该模块,并以这种方式分配搜索属性。
就像我说的,不确定这种事情是否有最佳实践,但我在野外多次看到这两种模式。
关于ruby-on-rails - 创建大哈希值的 Ruby 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76331772/