2013-04-30 22 views
6

Al fine di essere in grado di vedere se un utente ha condiviso la mia pagina su Facebook, voglio essere in grado di creare questo tipo di URL:URL di base di Rails nel Modello

http://graph.facebook.com/?id=http://stylehatch.co/some_unique_user_token 

Dove http://stylehatch.co avrebbe bisogno essere il mio URL di base. Sto pensando di avere un metodo nel modello User che costruirà e restituirà quell'URL, ma non posso accedere a root_url dal mio modello.

Come posso ottenere l'URL di base della mia applicazione da un modello?

Dire se i miei URL simile a questa:

http://myapp.com/users/new 

http://myapp.com/users/2/show 

Come posso ottenere il "http://myapp.com" dal mio modello? Ho aggiunto:

include Rails.application.routes.url_helpers 

nel mio modello, ma sembra che root_url è pari a zero. qualche idea? È corretto essere un metodo Model o dovrei inserirlo in un helper?

Grazie

+0

Solo per un po 'di contesto, che cosa vogliono fare con l'URL di base all'interno di un modello? – summea

+0

possibile duplicato di [Come ottenere l'host e la porta in un'applicazione Rails] (http://stackoverflow.com/questions/2813290/how-do-i-get-the-host-and-port-in-a -rails-applicationiton) –

+1

Lasciami modificare e aggiungere un po 'di contesto. –

risposta

3

non si vuole modello sapere URL. Ma nel controller hai un oggetto chiamato request. Potresti ricevere l'url da "#{request.protocol}#{request.host}".

+0

Speransky, pensi sia corretto averlo nel modello e passare l'url come parametro? O pensi che questo appartenga a un aiuto? –

+0

Nella situazione descritta dall'OP e in situazioni come l'invio di e-mail che rimandano al tuo sito, in genere è necessaria una parte della tua app (indipendentemente dal fatto che sia il modello) per essere a conoscenza dell'URL di base della tua applicazione. [@ earth2jason's answer] (http://stackoverflow.com/a/24371267/1998680) di seguito sembra un buon approccio per questo. – maurice

8

Se si desidera ottenere l'URL di root nel modello, ciò che ho fatto è chiamare una variabile ENV.

Se non l'hai già, andare avanti e creare .env nella directory principale del vostro applicatoin e impostare in fase di sviluppo a:

ROOT_URL=http://localhost 

nell'ambiente di produzione set:

ROOT_URL=https://mydomain.com 

Naturalmente questo è difficile da codificare, quindi il problema è che devi ricordarti di cambiarlo quando cambi i domini e il file di ogni ambiente deve essere diverso.

E assicuratevi che questo sia anche nel vostro gitignore dato che altri dati sensibili verranno memorizzati qui.

nel modello si chiamano da: ENV [ 'root_url']

Problemi correlati