Я бы хотел иметь частичку ERB, как это:
<ul id='things-index'>
<% @things.each do |t| %>
<li><%= t.name %></li>
<% end %>
</ul>
И сможете обновить его в контроллере так:
class ThingsController < ApplicationController
def create
@thing = Thing.new(params[:thing])
@thing.save
respond_to do |format|
format.html
format.js do
@things = Thing.all
page.replace('things-index')
end
end
end
end
Это означает, что JavaScript будет отправлен в качестве ответа, без необходимости подробно описывать шаблон js.erb, например: create.js.erb
:
$('#things-index').replaceWith('<%= escape_javascript(render("things/index")) %>')
Возможно, что-то подобное уже есть, либо встроено в Rails, либо доступно в виде гема, но если это так, я не знаю об этом.
Полагаю, в идеале, он бы повторно обработал действие index через JS и отправил бы обновление в браузер, так что это может выглядеть примерно так:
respond_to do |format|
format.html
format.js do
render 'index'
end
end
И знаете, чтобы заменить #things-index
(или позвольте мне явно указать его).
Обновление
Упс ... Видимо, было page.replace_html
, когда Prototype был частью Rails, но эта функциональность была заменена методом шаблона .js.erb
. Мне это кажется намного менее СУХИМЫМ (тонны почти идентичных js.erb
шаблонов), поэтому, если у кого-то есть решение, я буду признателен.