Мне кажется, что все ваши ссылки показать / скрыть вызывают одну и ту же функцию (show_details()
и т. Д.), Которая показывает / скрывает все сообщения (из-за цикла), а не конкретные. Вместо того, чтобы определять функцию для каждой из них, более элегантный способ решения этой проблемы будет выглядеть примерно так:
<%= link_to_function "show details", "Effect.BlindDown('details_<%= b.id %>', {duration:0.3});" %>
Это, конечно, не ненавязчиво, но это начало.
EDIT
Я только что заметил ваши ссылки, которые вы хотите показать для каждого div. Ну, вы можете бросить это сразу после эффекта Blind:
<%= link_to_function "show details", "Effect.BlindDown('details_<%= b.id %>', {duration:0.3});$('hide_details_link_<%= b.id %>').style.display = 'inline';" %>
и т.д.
Или вы можете сделать цикл javascript в функции загрузки документа, который находит все div и привязывает функцию к каждому из них, но это становится более сложным, чем я хочу продемонстрировать, особенно если вы, кажется, не используете Прототип (хотя вы используете Scriptaculous? Это должно дать вам доступ к помощникам .show () /. Hide () ...)
Кроме того, зачем использовать div? Вы можете идентифицировать ссылки прямо по ссылкам (см. Опции link_to_function)