2012-02-12 16 views
7

Używam tagu link_to w moim poście/widoku indeksu i chcę go połączyć z moimi wpisami/wyświetleniem/widokiem id z kotwicą, która powoduje przejście do formularza komentarzy. Z jakiegoś powodu nie mogę uruchomić kotwicy. Tu jest mój kodu:Railsy 3.1.3 za pomocą atrybutu zakotwiczenia z tagiem link_to z postów/indeksu do postów/show/id nie działają

w postach/index

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

To nie dołączyć znak # na końcu linku, więc jest to po prostu localhost: 3000/posty/id. Próbowałem również wiele odmian dla link_to, w tym:

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

i

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

ale już nie miał szczęścia.

Oto moje posty # show działanie:

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

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

i tutaj jest widok postów/pokaż gdzie chcę kotwica, aby przewinąć do:

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

Ponadto, każdy z powyżej działa, jeśli łączę się z czymś na stronie indeksu, ponieważ widzę, że hash # został dodany do wyjściowego adresu URL. Z jakiegoś powodu nie działa przy próbie połączenia z stroną programu. Jakaś pomoc z tym?

Odpowiedz

14

Spróbuj tego:

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

Drugi argument link_to jest zazwyczaj przekazywana jak jest do url_for i trzeci argument jest używany jako skrót dla atrybutów elementu <a> że ostatecznie zostanie wygenerowany.

W pierwszym przykładzie podajemy obiekt Post jako drugi argument, a skrót jako trzeci argument. Tylko Post zostanie przekazany do url_for. Nigdy nie widzi skrótu zawierającego opcję :anchor, więc nie zobaczysz zakotwiczenia na końcu generowanego adresu URL. (Ale prawdopodobnie zobaczysz atrybut anchor="comment_form" na wygenerowanym elemencie <a>).

Twój drugi przykład jest niepoprawny syntaktycznie. Wyobrażam sobie, że to spowodowało błąd.

Twój trzeci przykład ... powinien zadziałać. Nie jestem pewien, dlaczego tak się nie stało :-)