Почему link_to добавляет идентификатор в свой вывод, когда я не передаю идентификатор модели? - PullRequest
0 голосов
/ 09 октября 2009

Я использую Rails 2.2.2 со старыми школьными маршрутами (т.е. я не RESTful), и я замечаю странное поведение, исходящее из метода Rails link_to. Вот мой звонок:

link_to("my description", { :controller => controller, :action => action }, :id => "html_id")

Я хочу, чтобы метод выдал "/ controller / action", но вместо этого я получаю "/ controller / action / id". Это происходит только тогда, когда link_to вызывается при обработке запроса URL-адреса «/ controller / action / id», а контроллер и действие такие же, как те, которые я передаю link_to. Пример:

  1. Я нахожусь на странице "/ controller / action", и ссылки на этой странице на "/ controller / action" правильно указывают на "/ controller / action"
  2. Я нажимаю ссылку на «/ controller / action / id», и ссылки на новой странице, которые должны указывать на «/ controller / action», теперь указывают на «/ controller / action / id», где id такой же в качестве идентификатора, который был в предыдущем запросе.

Мне кажется, что-то запуталось. В запросе есть идентификатор, который запускает вызов link_to, но я не хочу, чтобы на него ссылались, и я явно не передаю параметр id. Для справки, вот мои старые школьные маршруты по умолчанию:

map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

Есть идеи, почему это происходит, и, что более важно, как это остановить? Большое спасибо.

1 Ответ

1 голос
/ 10 октября 2009

link_to вызывает помощник url_for, который вызывает ActionController :: url_for Если ActionController :: url_for дано: action, он принимает: id текущей страницы.

Я не совсем уверен, как это исправить.

Явное указание nil-идентификатора может сработать или привести к его поломке с ошибкой nil-объекта.

link_to "My description", {:controller => controller, :action => action, :id => nil}, :id => "html_id"

Вы также можете обойтись по названному маршруту к вашей паре контроллер / действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...