Что правильный путь состоит в том, чтобы определить тег привязки в направляющих?

Это очевидно из документации (и Google), как генерировать ссылку с сегментом, например. podcast/5#comments. Вы просто передаете значение для :anchor к link_to.

Мое беспокойство о намного более простой задаче генерации Comments тег т.е. место назначения первой ссылки.

Я попробовал следующее, и хотя они, казалось, работали, разметка не была тем, что я ожидал:

link_to "Comments", :name => "comments"
link_to "Comments", :anchor => "comments"

Я думаю, что пропускаю что-то очевидное. Спасибо.

17
задан Joe Flynn 19 January 2010 в 06:26
поделиться

2 ответа

Вы запутались синтаксическим сахаром 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 ), чтобы вы должны учиться Эта техника. Под сомнением, просто добавьте все скобки.

54
ответ дан 30 November 2019 в 10:09
поделиться

Если вы хотите пройти через рельсы, я предлагаю Content_Tag ( Документы ).

Пример:

content_tag(:a, 'Comments', :name => 'comments')
14
ответ дан 30 November 2019 в 10:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: