2009-04-16 7 views
36

Sto provando a creare ancoraggi unici per ogni commento sul mio blog in modo che una persona possa prendere l'url di un'ancora e incollarla nel proprio browser, che caricherà automaticamente la pagina e scorrerà verso il basso fino al punto della pagina in cui inizia il suo commento.Come creare un'ancora e reindirizzare a questo ancoraggio specifico in Ruby on Rails

Forse sto andando su questo nel modo sbagliato ma ho provato questo che è stato inutilmente.

commento Vedi - Fail 1 - quando viene incollato in un browser questo link non scorrere verso il basso fino alla posizione desiderata

<%= link_to '#', :controller => 'posts', :action => 'show', :id => comment.post, :anchor => 'comment_' << comment.id.to_s %> 

regolatore Commenti - Fail 2 - URL corretto nel browser, ma nessun lo scorrimento avviene rimane solo a la parte superiore della pagina

redirect_to :controller => 'posts', :action => 'show', :id => @post, :anchor => 'comment_' + @comment.id.to_s 

Se qualcuno potesse aiutare sarei molto grato :)

AGGIORNAMENTO: le soluzioni di seguito quasi lavoro, tuttavia esco con il seguente URL a cui non si scorre se faccio clic su di esso.

# cioè http://localhost:3000/posts/please-work

+0

Per fare la schermata di scorrimento l'url deve specificare dove si desidera che per scorrere fino a. Per fare questo devi avere un # comment_123 alla fine del tuo url. Dove il testo dopo il '#' deve corrispondere al valore di un attributo 'nome' in un tag di ancoraggio. L'URL del tuo aggiornamento non scorrerà per mancanza di un #. – vrish88

+0

Sì, l'ho provato, non ha funzionato! scopre il: ancoraggio crea questo url # Ma usando: nome cambia a questo, che come dici tu è quello che sto cercando. Qualche idea sul perché questo è il caso? # Damian

+0

Oh, ok capisco. Dispiace per la confusione. Ho aggiornato la mia risposta ma sembra che tu debba concatenare manualmente l'ancora alla fine dell'URL. Altrimenti il ​​tag link_to pensa che: anchor è un attributo html. Spero che funzioni :) – vrish88

risposta

5

Sembra che si desidera utilizzare il codice link_to che avete nella vostra domanda. Poi nella tua lista di commenti devi assicurarti di avere un tag di ancoraggio chiamato la stessa cosa nel link.

Quindi questo:

<%= link_to 'Your comment', post_path(@comment.post) + "#comment_#{@comment.id.to_s}" %> 

genererà qualcosa di simile

<a href="localhost:3000/posts/2#1comment_234">Your comment</a> 

/* html code */  

<a name="comment_1234">This is a comment</a> 

Bisogna virare manualmente sul #comment_ altrimenti il ​​metodo link_to pensa che il: attributo di ancoraggio che si sta passando è per quel tag.

+2

È necessario utilizzare la risposta di XGamerX. Questo funzionerebbe ma non è molto elegante. – marcgg

0

Prova questa:

<%= link_to '#', post_path(comment.post), :anchor => "comment_#{comment.id}" %> 
+0

Questo funziona quasi, ma io esco con il seguente URL a cui non si scorre se faccio clic su di esso. # , ad esempio http: // localhost: 3000/posts/please-work – Damian

-1

Questi link scorrere verso il basso alla posizione in cui si dispone di codice come:

<a name="comment_1"></a> 

non so se ci sono aiutanti che lo farà per voi, ma è molto semplice e si può scrivere il proprio.

1

Ecco un miglioramento di @ XGamerX risposta.

<%= link_to '#', [comment.post, { anchor: dom_id(comment) }] %> 

O

<%= link_to '#', post_path(comment.post, anchor: dom_id(comment)) %> 
0

questo è il modo migliore:

<%= link_to '#', post_path(comment.post, anchor: dom_id(comment.id)) %>