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

使用Ransack筛选数据遇问题:Map重复键导致仅获取部分状态数据

问题解决:Ransack多状态筛选失效及Map重复键警告

问题原因

Dart的Map不允许存在重复键,你代码中重复定义"q[payment_status_in][]"键,后一个值"Overdue"会直接覆盖前一个"Coming Due",最终接口只收到Overdue这一个筛选条件,同时IDE抛出重复键警告。

解决方案

Ransack的_in筛选器支持传入数组值,只需将对应键的值设置为包含两个状态的列表,Dio会自动将列表解析为符合Ransack要求的多参数格式。

修改后的代码:

Future<ListResponse?> getData(GetParams params) async {
  Map<String, dynamic> commonParams = {
    // ... 其他参数
    "q[payment_status_in][]": ["Coming Due", "Overdue"]
  };

  Response response = await Dio()
      .get('$kBaseUrl/xxx', queryParameters: commonParams);

  var res = ListResponse.fromJson(response.data);

  if (res.status != true) {
    throw ServerException(res.errorMessage![0]);
  }

  return res;
}

说明

修改后,Dio发起请求时会自动生成如下格式的query参数:
q[payment_status_in][]=Coming%20Due&q[payment_status_in][]=Overdue
该格式完全符合Ransack的筛选规则,可同时筛选出"Coming Due"和"Overdue"状态的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:46:31