ROR传递数组作为参数

5

我正在尝试将数组作为参数传递给我的控制器方法,但是它对我没有起作用。我已经按照以下方式尝试过:

http://localhost:3000/med?med_ids=[2,1]

我试过下面的方法,它对我有效。我只是想知道有没有更好的解决方案。
http://localhost:3000/manufacturer/1/medicines?medicine_id[]=2&medicine_id[]=1

控制器内部:

@val = params[:medicine_id]

值已经获取,但我想将其转换为数组。

需要一些帮助。谢谢。


1
params[:medicine_id] 代表什么? - Rajdeep Singh
你可以将数组进行 JSON 编码,然后从控制器中解析它。 - Joseph Le Brech
我正在获取字符串。 - nilkash
尝试:?medicine_id%5B%5D=2&medicine_id%5B%5D=1 - BroiSatse
如果我理解问题正确,?medicine_id[]=2&medicine_id[]=1 对您有效。这是在查询字符串中传递数组的正确方法。 - RAJ
@JosephLeBrech 感谢您的快速回复。我尝试了您的解决方案,它对我很有效。唯一让我担心的是,如果我传递简单值而不是数组,如何处理异常。通过Begin和rescue或其他方式。 - nilkash
3个回答

6
您不能像这样从查询字符串中获取数组:
?med_ids=[2,1]

如果您想在查询字符串中传递数组,需要按照以下方式传递(正如您在问题中提到的):
?medicine_id[]=2&medicine_id[]=1

作为对你问题的回答:第二种方式是非常好且正确的方式。采用它吧。

3

如果您尝试发送像[1,2]这样的参数,则在您的控制器中,您将得到类似于"[1,2]"的字符串,

您需要解析原始数组以获取如下所示: JSON.parse "[1,2]"

答案:[1,2]和Array类


0

您可以选择构建控制器来解析分隔的数组:

?medicine_ids=1,2

控制器:

medicine_ids = params[:medicine_ids].split(',')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接