2010-11-05 2 views
10

Je voudrais ajouter un paramètre à chaque URL dans mon application Rails 2.3.10. J'ai joué avec le default_url_options mais je veux que le paramètre soit visible dans l'URL. Quelque chose comme:Rails ajouter un paramètre à chaque URL dans l'application

http://<server>/posts?token=XYZ 

Je construis un système de suivi affilate et je veux que les gens à partager le lien et être en mesure de suivre le lien est qui a été utilisé plus tard, quand quelqu'un clique dessus (pour donner des points au gars qui a partagé le lien). Des conseils comment je peux ajouter un paramètre visible dans chaque URL utilisé dans l'application?

Merci!

Répondre

5

Rewrite url_for

module ActionView::Helpers::UrlHelper 
    def url_for options 
    options.merge! {:token => generate_token} 
    super 
    end 
end 

ou tout simplement ajouter à votre fichier application.rb

config.default_url_options += {:token => proc{generate_token}} 
+0

Je suis allé pour le default_url_options dans l'application_controller.rb comme votre première solution ne semble pas fonctionner pour moi (la méthode de fusion n'existe pas pour un tableau et apparemment args est un tableau). Merci pour l'aide! – Cimm

+0

Oups, ma mauvaise. Je suppose que je l'ai réparé maintenant. – edgerunner

0

J'utiliser les utilisateurs se connectent, ou générer un jeton que vous enregistrez comme un champ dans la table d'utilisateur, puis l'ajouter à l'URL comme ceci:

post_path(@post, :token => user.token) 

Si vous voulez que le jeton soit unique le poste puis d'inclure un jeton de la même message:

#post.rb 
def generate_token user 
    "#{self.token}-#{user.token}" 

#view 
post_path(@post, :token => post.generate_token) 
+1

Merci pour la réponse Mark, mais le jeton je, ce n'est pas le problème. Ma question portait sur l'ajout du jeton à chaque URL et ne pas avoir à passer le paramètre de jeton à chaque fois comme vous le montrez. – Cimm

2

définissent default_url_options dans ApplicationController (ou le contrôleur concerné)

def default_url_options 
    {subdomain: 'www'} 
end 
Questions connexes