Самый простой способ - использовать link_to_function в представлении:
<%= javascript_include_tag :defaults %>
<%= link_to_function "toggle", "$('thing_#{@thing.id}').toggle()" %>
<p id="thing_<%= @thing.id %>">
<b>Body:</b>
<%=h @thing.body %>
</p>
Еще один способ сделать это - использовать RJS, но это во многом зависит от того, как работает ваше приложение. Таким образом, вы должны будете настроить свой контроллер для поиска пользовательских действий вне действий RESTful, или чтобы существующие действия искали запросы XHR (используя «if request.xhr?»)
RJS довольно прост:
page["thing_#{@thing.id}"].toggle
Лично я бы сказал, что что-то большее, чем $ (element) .toggle (), заслуживает того, чтобы находиться вне представления в своем собственном RJS, поскольку предполагается, что представление в основном не содержит логики, но, вероятно, существует много разные мнения по этому поводу.
Что касается инфраструктуры javascript, если я не делаю что-то действительно требующее чего-то, чего нет в prototype / scriptaculous, я просто буду придерживаться значений по умолчанию для простоты.