React前端如何使Ransack的status_in参数以数组形式传递给Rails后端?
解决Ransack参数在前端传递数组格式的问题
问题背景
React前端原本通过以下方式初始化Ransack参数:
const statusFilter = 'ransack[status_in]=incomplete';
后端Rails处理时,得到的value是字符串"incomplete",但业务需求要求status_in始终以数组形式存在(支持多选场景),期望后端拿到的value为["incomplete"]。
之前尝试用const statusFilter = "ransack[status_in]=['incomplete']";,后端仅会将其识别为字符串"['incomplete']",不符合需求。
前端修改方案
利用Rails参数解析的规则:给参数名添加[]后缀,Rails会自动将同名参数解析为数组。
单选场景代码
const statusFilter = 'ransack[status_in][]=incomplete';
此时后端接收到的value会自动变成["incomplete"]。
多选场景代码
如果需要传递多个状态值,直接拼接多个同名字段即可:
// 同时传递incomplete和pending两个状态 const statusFilter = 'ransack[status_in][]=incomplete&ransack[status_in][]=pending';
后端会解析得到value = ["incomplete", "pending"]。
这种写法完全遵循Rails的参数解析逻辑,无需修改任何后端代码即可满足需求。
内容的提问来源于stack exchange,提问作者Jeff Zivkovic
相关产品推荐
相关产品推荐

