Ajouter un paramètre à l'url
J'ai une url (par exemple:http://www.youtube.com/watch?v=og9B3BEnBHo) et je voudrais ajouter un paramètre (paramètre wmode=opaque), de sorte que sa:
http://www.youtube.com/watch?v=og9B3BEnBHo&wmode=opaque
Quelqu'un peut me dire quelle fonction utiliser pour faire ce travail?
- Nous aurions besoin d'un peu plus d'informations pour être en mesure de vous aider. ie code. Avec le courant, je dirais, faire "uri + 'wmode=opaque" et qui vous donnent la chaîne correcte. Êtes-vous à l'aide de net/http ou d'une autre bibliothèque?
- J'aimerais assurez-vous que c'est joindre correctement (c'est la saisie de l'utilisateur). remarque: 'youtube.com/watch' + 'wmode=opaque' devienne 'youtube.com/watch?wmode=opaque'
- Si vous avez les params comme un
Hash
, essayezto_query
. C'est une partie deActiveSupport
de sorte que vous pourriez aussi avoir à l'exiger. Mais il fonctionne très bien pour nous.
Vous devez vous connecter pour publier un commentaire.
(L'appel à
String
assure que cela fonctionne aussi dans le cas où l'URI originale n'a pas une chaîne de requête)uri.query
retournenil
si l'URL n'a pas de param et laURI.decode_www_form(nil)
pauses.new_query_ar = URI.decode_www_form(uri.query || []) << ["wmode", "opaque"]
si vous exécutez dans le néant problèmenew_query_ar = URI.decode_www_form(uri.query || '') << ["wmode", "opaque"]
URI.encode_www_form({wmode: "opaque"})
à la place.Que Ruby a évolué au fil des années, la réponse diffère selon les versions.
Après 1.9.2
Ruby 1.9.2 vu
decode_www_form
etencode_www_form
ajouté à l'URI module et des paramètres de codage plus facile.Explication
URI.decode_www_form
pauses d'une chaîne de paramètres de la requête (uri.query
) dans un tableau imbriqué de paramètres ([["v", "og9B3BEnBHo"]]
)uri.query || ''
fournit soit la chaîne de requête de l'uri, ou si elle n'existe pas, une chaîne vide. Cela empêchedecode_www_form
de courir sur une erreur siuri.query
estnil
.<< ["wmode", "opaque"]
ajoute un autre élément de la matrice de paramètres de requête. Vous pouvez ajouter plus de en étendantnew_query_ar
:new_query_ar << ["fullscreen", "1"]
URI.encode_www_form
code pour le tableau imbriqué de nouveaux paramètres de requête dans une chaîne.Avant 1.9.2
Explication
[uri.query, "wmode=opaque"]
est un tableau de tous les éventuels paramètres de la requête. Vous pouvez ajouter d'autres par l'extension de la matrice:[uri.query, "wmode=opaque", "fullscreen=1"]
ou par l'ajout de l'élément final:"wmode=opaque&fullscreen=1"
compact
supprimenil
des éléments d'un tableau, donc il supprimeuri.query
si il n'y a pas une requête existante paramètre.join
, enfin, se joint à eux dans une chaîne de requête.Comme vous pouvez avoir plusieurs paramètres de requête que vous souhaitez ajouter et non pas une seule, voici une version qui vous permet d'ajouter autant de paramètres que vous le souhaitez par un simple passage dans une table de hachage ... en Plus d'une table de Hachage semble être un moyen plus naturel de passer dans
params
de toute façon, même si vous ne faites qu'ajouter un param.Exemples:
Une autre option est d'utiliser le Adressable gem
Une fois que vous incluez Adressable dans votre projet tout ce que vous avez à faire est de: