You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Ruby on Rails API控制器接收查询参数的数组值?

让Ruby on Rails支持重复查询参数解析为数组(兼容Express行为)

Rails默认会覆盖重复的查询参数值,但我们可以通过自定义中间件修改这一行为,无需变更原有API的URL格式。

实现步骤

1. 创建自定义中间件

在app/middlewares目录下新建parse_array_query_params.rb文件,写入以下代码:

class ParseArrayQueryParams
  def initialize(app)
    @app = app
  end

  def call(env)
    request = Rack::Request.new(env)
    # 列出需要解析为数组的查询参数键,可根据需求添加
    target_params = %w[include]
    
    target_params.each do |key|
      next unless request.GET.key?(key)
      
      # 获取该键对应的所有值
      all_values = request.GET.fetch_values(key)
      # 如果有多个值,将参数值替换为数组
      request.GET[key] = all_values if all_values.size > 1
    end

    @app.call(env)
  end
end

2. 注册中间件

打开config/application.rb,在应用配置中添加中间件:

module YourAppName
  class Application < Rails::Application
    # ... 其他现有配置
    config.middleware.use ParseArrayQueryParams
  end
end

3. 验证效果

启动Rails服务后,访问http://localhost:3000/api/resource?include=foo&include=bar,在对应的控制器中调用params[:include],会得到数组["foo", "bar"],与Express的解析行为完全一致。

注意事项

  • 该中间件仅针对你指定的参数(示例中的include)生效,不会影响其他参数的默认解析逻辑,避免引入不必要的全局变更。
  • 如果后续需要支持更多参数,只需在target_params数组中添加对应的键即可。

内容的提问来源于stack exchange,提问作者kylejw2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:27:13