Это очевидно из документации (и Google), как генерировать ссылку с сегментом, например. podcast/5#comments
. Вы просто передаете значение для :anchor
к link_to
.
Мое беспокойство о намного более простой задаче генерации Comments
тег т.е. место назначения первой ссылки.
Я попробовал следующее, и хотя они, казалось, работали, разметка не была тем, что я ожидал:
link_to "Comments", :name => "comments"
link_to "Comments", :anchor => "comments"
Я думаю, что пропускаю что-то очевидное. Спасибо.
Вы запутались синтаксическим сахаром Ruby (который рельсы используют обильно). Позвольте мне кратко объяснить это, прежде чем ответить на ваш вопрос.
Когда функция Ruby принимает один параметр, который является хэшем:
def foo(options)
#options is a hash with parameters inside
end
Вы можете «забыть», чтобы положить скобки / скобки и называть это так:
foo :param => value, :param2 => value
Ruby заполнит пробелы и понимает, что Вы пытаетесь сделать это:
foo({:param => value, :param2 => value})
Теперь, к вашему вопросу: Link_to
принимает Два Дополнительные хэши - один называется Параметры
, а другой HTML_OPTIONS
. Вы можете себе представить, что это определено так, как это (это приближение, это гораздо сложнее)
def link_to(name, options, html_options)
...
end
Теперь, если вы ссылаетесь на это так:
link_to 'Comments', :name => 'Comments'
Ruby станет немного запутанным. Он попытается «заполнить пробелы» для вас, но неправильно:
link_to('Comments', {:name => 'Comments'}, {}) # incorrect
Это подумает, что имя => «Комментарии»
Часть принадлежит вариантам, не к HTML_OPTIONS
!
Вы должны помочь Ruby, заполнив пробелы сами. Поместите все скобки на место, и он будет вести себя как ожидалось:
link_to('Comments', {}, {:name => 'Comments'}) # correct
Вы можете фактически удалить последний набор скобок, если хотите:
link_to("Comments", {}, :name => "comments") # also correct
, чтобы использовать HTML_OPTIONS, вы должны оставить первый набор скобок. Например, вам нужно будет сделать это для ссылки с подтверждением сообщением и именем:
link_to("Comments", {:confirm => 'Sure?'}, :name => "comments")
другие рельсы помощники имеют аналогичную конструкцию (то есть Form_for
, Collection_Select
), чтобы вы должны учиться Эта техника. Под сомнением, просто добавьте все скобки.
Если вы хотите пройти через рельсы, я предлагаю Content_Tag
( Документы ).
Пример:
content_tag(:a, 'Comments', :name => 'comments')