Предположим, что у меня есть приложение Rails, в котором пользователи могут писать сообщения в блоге. После того, как пользователь начнет печатать, вызывается функция AJAX, которая фиксирует запрос POST и сохраняет сообщение в блоге. То, что я хотел бы сделать, это проверить, находится ли сообщение в блоге уже в базе данных, а затем непрерывно сохранять его через AJAX по типу пользователя.Обновление моделей Rails через AJAX?
Я использую contenteditable атрибут HTML5 для заголовка и содержания сообщения в блоге областей ввода:
<div id="entry-create-partial">
<div id="title-create-partial" name="title" contenteditable="true" data-placeholder='Title it' style="color:black"></div>
<div id="content-create-partial" name="content" contenteditable="true" data-placeholder='Write anything' style="color:gray"></div>
</div>
Вот JavaScript, чтобы делать то, что я хочу:
$(function(){
if ($("#title-create-partial").length > 0) {
setTimeout(autoSavePost, 6000);
}
});
function autoSavePost(){
$.ajax({
type: "POST",
url: "/submissions",
dataType: "json",
data: {title: $("#title-create-partial").text().serialize(), content: $("#content-create-partial").text().serialize()},
success: function(){
$("#success-indicate").fadeIn().delay(4000).fadeOut();
}
});
setTimeout(autoSavePost, 6000);
}
Однако в моей JS консоли Я получаю сообщение об ошибке, указывающее, что данные, которые я дал .ajax, не имеют метода сериализации. Я не уверен, как правильно передать его AJAX.
Кроме того, как только я отправлю его через AJAX, я не уверен, как обновить :content
на стороне базы данных. Вот create
контроллер, что URL маршруты Аякса:
def create
@submission = Submission.where(title: params[:title]).first_or_create(
title: params[:title],
content: params[:content],
user_id: params[:user_id]
)
@submission.user = current_user
if @submission.save
redirect_to :action => :show, :id => @submission.id
else
redirect_to :action => :index
end
end
Как отправить текст из contenteditable дивы, а затем в контроллере, как обновить содержимое? Я слышал о update_attributes, но я не уверен, как это использовать.
С точки зрения jquery просто используйте '.text()' для своего названия и контента. Это просто текст ...сериатизировать нечего. – Divey
Когда я это делаю, я получаю ошибку «неопределенный метод» stringify_keys в моей консоли. –
Nevermind, исправлена проблема stringify_keys. –