Подтвердить что ты не робот

Какой правильный способ определить якорный тэг в рельсах?

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

Моя забота о гораздо более простой задаче генерации тега <a name="comments">Comments</a>, то есть адресата первой ссылки.

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

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

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

4b9b3361

Ответ 1

Вас путают синтаксический сахар Ruby (который Rails использует обильно). Позвольте мне кратко объяснить это, прежде чем ответить на ваш вопрос.

Когда функция 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 принимает два дополнительных хэша - один называется options, а другой html_options. Вы можете себе представить, что он определен как это (это приближение, оно намного сложнее)

def link_to(name, options, html_options)
...
end

Теперь, если вы вызываете его так:

link_to 'Comments', :name => 'Comments'

Ruby немного запутался. Он попытается "заполнить пробелы" для вас, но неправильно:

link_to('Comments', {:name => 'Comments'}, {}) # incorrect

Будет считаться, что часть name => 'Comments' принадлежит параметрам, а не html_options!

Вы должны помочь рубину, заполнив сами пробелы. Поместите все скобки на место и они будут вести себя так, как ожидалось:

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

Ответ 2

Если вы хотите пройти через рельсы, я предлагаю content_tag (docs).

Пример:

content_tag(:a, 'Comments', :name => 'comments')

Ответ 3

<%= link_to('new button', action: 'login' , class: "text-center") %>

создан якорный тег для login.html i.g

<a href="login.html" class = "text-center"> new button </a>

и для

<a href="admin/login.html" class = "text-center"> new button </a>

использование

<%= link_to('new button', controller: 'admin',
    action: 'login' , class: "text-center") %>