2012-02-12 12 views
7

Sto usando un tag link_to sul mio post/vista indice e voglio collegarlo al mio post/mostra/id view con un ancoraggio che lo fa scorrere verso il basso nella forma dei commenti. Per qualche motivo non riesco a far funzionare l'ancora. Qui è il mio codice:Rails 3.1.3 usando l'attributo anchor con link_to tag da posts/index a posts/show/id non funziona

Nei post/index

<%= link_to 'Add a Comment', post, :anchor => 'comment_form' %> 

Questo non riesce a aggiungere il segno # fino alla fine del collegamento, quindi è solo localhost: 3000/messaggi/id. Ho anche provato molte varianti per link_to, tra cui:

<%= link_to 'Add a Comment', post(:anchor => 'comment_form' %> 

e

<%= link_to 'Add a Comment', :controller => 'posts', :action => 'show', :id => @post, :anchor => 'comment_form' %> 

ma non ho avuto fortuna.

Ecco il mio post # show azione:

def show 
    @post = Post.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @post } 
    end 
    end 

e qui è la vista messaggi/spettacolo dove voglio l'ancora per scorrere fino a:

<h2><a name="comment_form" id="comment_form">Add a comment:</a></h2> 

Inoltre, una delle sopra funziona se sto collegando a qualcosa nella pagina indice, come posso vedere l'hash # è stato aggiunto all'url emesso. Per qualche motivo non funziona quando si tenta di collegarsi alla pagina dello spettacolo. Qualche aiuto con questo?

risposta

14

Prova questa:

link_to('Add a comment', post_path(post, :anchor => 'comment_form')) 

Il secondo argomento link_to è tipicamente passato come è a url_for, e il terzo parametro viene utilizzato come attributi hash per l'elemento <a> che alla fine viene generato.

Quindi nel tuo primo esempio, stai passando un oggetto Post come secondo argomento e un hash come terzo argomento. Solo lo Post verrà passato a url_for. Non vede mai l'hash contenente l'opzione :anchor, quindi non vedresti l'ancora alla fine dell'URL generato. (Ma probabilmente vedresti un attributo anchor="comment_form" sull'elemento generato.)

Il tuo secondo esempio è sintatticamente errato. Immagino che abbia provocato un errore.

Il tuo terzo esempio ... avrebbe dovuto funzionare. Non sono sicuro del motivo per cui non lo ha fatto :-)