Вы не упоминаете библиотеку JavaScript, которую вы используете. Это решение основано на jquery. Довольно просто сделать то, что вы хотите, используя всего одно действие destroy
. Но я бы предложил другую технику. Я нахожу RJS довольно стеснительным. Перейти на JQuery Taconite плагин. Это все разметка, а не ... набор javascript, смешанный с erb, который менее привлекателен для глаз!
Так что теперь вместо вашего destroy.rjs
у вас будет destroy.xml.erb
. Прежде чем перейти к тому, что вам нужно, давайте посмотрим, какие изменения нужно внести для вашего действия destroy
.
ДО:
def destroy
@model = Model.find(params[:id])
@model.destroy
respond_to do |format|
format.html { redirect_to :action => :index }
format.xml
end
end
ПОСЛЕ:
def destroy
@model = Model.find(params[:id])
@model.destroy
@template = params[:template]
respond_to do |format|
format.html { redirect_to :action => :index }
format.xml
end
end
Добавьте именованный маршрут в ваши маршруты. Rb, чтобы упростить вещи:
map.destroy_using_template 'destroy/:id/:template', :controller => "controller", :action => "destroy"
По вашему мнению:
Добавьте плагин jquery taconite к заголовку в вашем <layout>.html.erb
,
<%= javascript_include_tag "jquery.js", "jquery.taconite.js" %>
В представлении для шаблона 1:
Предполагается, что вы используете ссылку для удаления.
<%= link_to "Delete", destroy_using_template_path(:id => "1", :template => "temp1"), :method => :delete, :confirm => "Are you sure you want to delete the record?" %>
и то же самое для шаблона 2:
Предполагается, что вы используете ссылку для удаления.
<%= link_to "Delete", destroy_using_template_path(:id => "1", :template => "temp2"), :method => :delete, :confirm => "Are you sure you want to delete the record?" %>
Теперь в вашем destroy.xml.erb
<taconite>
<% if @template=="temp1" %>
<remove select="#template1" />
<% elsif @template=="temp2" %>
<remove select="#template2" />
<% end %>
<eval>
//OPTIONAL: Execute some javascript here if you want. You can do most of the DOM modifications using taconite itself.
alert("HEY!!!");
</eval>
</taconite>
Разве это не легко сейчас? :)
Помните, что при использовании таконита вы должны убедиться, что код в destroy.xml.erb соответствует XML. Убедитесь, что вы закрыли все открытые теги. Подробнее о таконите читайте здесь: http://malsup.com/jquery/taconite/
Taconite реализует все обычные модификаторы DOM jquery в разметке и несколько дополнительных. Если вы хотите переключиться на javascript, вы можете легко сделать это, просто включив этот javascript в тег eval
, как показано выше.