2012-02-12 7 views
7

Я использую тег link_to в своем сообщении/индексном представлении и хочу связать его с сообщениями/показами/идентификаторами с якорем, который заставляет его прокручивать до формы комментариев. По какой-то причине я не могу заставить якорь работать. Вот мой код:Rails 3.1.3 с использованием атрибута привязки с тегом link_to из сообщений/индекса в сообщения/show/id не работает

В сообщений/индекс

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

Это не удается добавить знак # в конце ссылки, так что это просто локальный: 3000/сообщений/идентификатор. Я также пробовал много вариантов для link_to, в том числе:

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

и

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

, но у меня не было никакой удачи.

Вот мои сообщения # показать действие:

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

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

и вот вид сообщений/показать, где я хочу якорь для прокрутки:

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

Кроме того, любой из выше работает, если я ссылаюсь на что-то на странице индекса, так как я вижу, что хэш # был добавлен к выведенному URL-адресу. По какой-то причине он не работает при попытке ссылки на страницу показа. Любая помощь в этом?

ответ

14

Попробуйте это:

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

Второй аргумент link_to, как правило, передается как есть в url_for, а третий аргумент используется в качестве атрибутов хэша для <a> элемента, который в конечном счете, получает генерируется.

Итак, в первом примере вы передаете объект Post в качестве второго аргумента и хеша в качестве третьего аргумента. Только Post будет передан в url_for. Он никогда не видит хэш, содержащий параметр :anchor, поэтому вы не увидите якорь в конце сгенерированного URL. (Но вы, вероятно, увидите атрибут anchor="comment_form" на сгенерированном элементе <a>.)

Ваш второй пример синтаксически неверен. Я предполагаю, что это привело к ошибке.

Ваш третий пример ... должен был работать. Я не уверен, почему этого не произошло :-)