ruby-on-rails - 创建大哈希值的 Ruby 方法

标签 ruby-on-rails ruby

我正在使用 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/

相关文章:

Ruby - 返回 false 除非值是 true 在这种情况下返回值

ruby - 如何将数组传递给接受带有 splat 运算符的属性的方法?

ruby-on-rails - 如何匹配和删除 ruby​​ 文件中的整行?

iPhone核心数据与Ruby on Rails同步

ruby-on-rails - Ruby on Rails Activemerchant 集成 - 传递变量

ruby - 如何使用 github 存储库中的新 afm 构建 pdfkit

javascript - 如何通过论证 Rails

ruby-on-rails - Rails Paperclip gem 参数数量错误错误

ruby-on-rails - rails,将未定义的属性添加到 form_tag

ruby-on-rails - 我将 Rails3 与 tinymce 一起使用。如何呈现用户关闭浏览器javascript然后输入xss?