2010-11-05 12 views
10

Vorrei aggiungere un parametro a ogni URL nella mia applicazione Rails 2.3.10. Ho giocato con lo default_url_options ma voglio che il parametro sia visibile nell'URL. Qualcosa di simile:Rails aggiunge parametro a ogni URL nell'applicazione

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

Sto costruendo un sistema di tracciamento affilate e voglio la gente a condividere il link ed essere in grado di tenere traccia di collegamento che è stato utilizzato più tardi, quando un utente fa clic esso (per dare punti con il ragazzo che ha condiviso il link). Qualche suggerimento su come posso aggiungere un parametro visibile in ogni URL utilizzato nell'applicazione?

Grazie!

risposta

5

Rewrite url_for

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

o semplicemente aggiungere questo al file application.rb

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

Sono andato per default_url_options in application_controller.rb poichè la prima soluzione non sembra funzionare per me (il metodo di unione non esiste per un array e apparentemente args è un array). Grazie per l'aiuto! – Cimm

+0

Whoops, mio ​​male. Credo di averlo risolto ora. – edgerunner

0

userei gli utenti login, oppure generare un token che si memorizza come un campo nella tabella user poi aggiungere che, per l'URL come così:

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

Se si vuole il token per essere unico per il palo poi similmente includono un gettone messaggio:

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

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

Grazie per la risposta di Mark, ma il token che ho, non è questo il problema. La mia domanda riguardava l'aggiunta del token a ciascun URL e il fatto di non dover passare il token param ogni volta che si mostra. – Cimm

2

definiscono default_url_options in ApplicationController (o il controller rilevante)

def default_url_options 
    {subdomain: 'www'} 
end