Comment passer un tableau de paramètres via la méthode Get in rails? Actuellement, mes URL ressemblent à ceci:
http://localhost:3000/jobs/1017/editing_job_suites/1017/editing_member_jobs/new?ids[]=1025&ids[]=1027
Comment puis-je passer le tableau avec la méthode Get mais éviter la partie ?ids[]=1025&ids[]=1027
.
La demande est envoyée avec la méthode javascript window.open. Existe-t-il une solution de contournement permettant d’envoyer une demande Post non ajax.
Non, GET ne peut que mettre des variables sur l’URL elle-même. Si vous voulez que l'URL soit plus courte, vous devez POST. C'est un limitation fonctionnalité de HTTP, pas Rails.
Vous devez vous en tenir à l'utilisation d'une requête GET si vous ne modifiez pas l'état de quoi que ce soit et si vous souhaitez accéder à une valeur en lecture seule.
Pour envoyer un tableau d'identifiants à Rails dans une requête GET, il vous suffit de nommer votre variable avec des crochets à la fin.
//angular snippet
$http.(method:'GET',
...
params: {'channel_id':2, 'product_ids[]': productIds}
//where productIds is an array of integers
...
)
Ne concaténez pas vos identifiants en une liste séparée par des virgules, mais transmettez-les individuellement de manière redondante. Donc, dans l'URL, cela ressemblerait à quelque chose comme ça:
?channel_id=2&product_ids[]=6900&product_ids[]=6901
url encoded ce sera en fait plus comme ceci:
?channel_id=2&product_ids%5B%5D=6900&product_ids%5B%5D=6901
Les rails sépareront ce retour pour vous.
Parameters: {"channel_id"=>"2", "product_ids"=>["6900", "6901"]}
Récemment, je voulais faire cela et j'ai trouvé une solution de contournement un peu moins complexe, avec quelques limitations de complexité mais pouvant être plus facile à implémenter. Je ne peux pas parler à la sécurité, etc.
Si vous transmettez vos valeurs de tableau sous forme de chaîne avec un délimiteur, par exemple,.
http://example.com/controller?job_ids=2342,2354,25245
Ensuite, vous pouvez prendre le résultat et le ré-analyser à votre guise:
job_ids = params[:job_ids].split(',')
Alors fais n'importe quoi:
job_ids.each do |job_id|
job = Job.find(job_id.to_i)
end
etc
@Homan answer est valable pour l’utilisation d’un client externe (par exemple curl
ou angulaire). Dans les cas de test Inside Rails, vous ne devez cependant pas utiliser []
. Voici un exemple:
get get_test_cases_url(**path_params), params: {case_ids: ["NON-9450", "NON-12345", "NON-9361"]}
Ceci utilise un nouveau format où get_test_cases
est le nom de route et vous transmettez à la méthode tous les paramètres nécessaires pour construire le chemin de l'URL. Les paramètres de requête sont un hachage séparé.
Pour votre information si j'utilise []
comme case_ids[]
, alors au lieu de ["NON-9450", "NON-12345", "NON-9361"]
je le fais analyser en [["NON-9450"], ["NON-12345"], ["NON-9361"]]