Этот вопрос предназначен для отмены предыдущего вопроса, который я задал вчера , который касается перемещения функции создания / редактирования модели на ее индексную страницу. Последняя проблема, с которой я столкнулся, заключается в том, что когда я иду, чтобы удалить модель, у меня есть некоторый javascript, который должен быть запущен и перезагружает список моделей, чтобы отразить изменения в базе данных. Этот JS отображается как HTML. Вот код, который я считаю уместным:
в моем контроллере:
def destroy
@post = Post.find(params[:id])
@post.destroy
flash[:notice] = "Successfully destroyed post."
@posts = Post.all
respond_to do |format|
format.js {render :content_type => 'text/javascript' }
end
end
мой список сообщений частично (который имеет ссылку уничтожить, на которую я ссылаюсь):
<table>
<tr>
<th>Title</th>
<th>Content</th>
</tr>
<% for post in @posts %>
<tr>
<td><%= post.title %></td>
<td><%= post.content %></td>
<td><%= link_to "Edit", edit_post_path(post), :class => "edit" %></td>
<!--
This is the problem here... I can't seem to get it to work.
It DOES delete the record, but then gets redirected to /posts/:id
and displays my javascript as html.
-->
<td><%= link_to "Destroy", post , :confirm => 'Are you sure?', :method => :delete, :class => 'destroy' %></td>
</tr>
<% end %>
</table>
destroy.js.erb:
$("#post_errors").hide(300);
$("#flash_notice").html("<%= escape_javascript(flash[:notice])%>");
$("#flash_notice").show(300);
$("#posts_list").html("<%= escape_javascript( render(:partial => "posts") ) %>");
JavaScript, который загружается при загрузке страницы:
// Setting up the ajax requests for the forms/links.
$(document).ready(function() {
$("#new_post").submitWithAjax();
$("a.edit").each(function(){
$(this).getWithAjax();
});
$("a.destroy").each(function(){
$(this).postWithAjax();
});
});
// Setting up ajax for sending javascript requests
jQuery.ajaxSetup({
'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
});
jQuery.fn.submitWithAjax = function() {
this.submit(function() {
$.post(this.action, $(this).serialize(), null, "script");
return false;
});
return this;
};
jQuery.fn.getWithAjax = function() {
this.click(function() {
$.get(this.href, null, null, "script");
return false;
});
return this;
};
jQuery.fn.postWithAjax = function() {
this.click(function() {
$.post(this.href, null, null, "script");
return false;
});
return this;
};
Чтобы увидеть весь код, который я использую, посмотрите другой вопрос, который я написал, но я думаю, что этого достаточно, чтобы увидеть, что я делаю неправильно. Кроме того, когда я запускаю Chrome и нажимаю на ссылку уничтожить, Chrome показывает мне предупреждение JavaScript:
Resource interpreted as document but transferred with MIME type text/javascript.