下書きを保存できるようにするコメントモデルがあります。コメントを保存できるブール属性「draft」があります(ただし、まだ表示されていません)。これらのコメントの自動保存関数を作成しています。
現在のコメントフォームは次のように実行されます。変数@commentは、コントローラーによって@comment=Comment.newとして初期化されます。次に、コメントのフォームは次のとおりです。
<%= form_for @comment, :remote => true do |f| %>
<%= f.text_area :title, :class => "inputform" %>
<%= f.text_area :content, :class =>"inputform" %>
<%= f.submit "Submit", :class => "button" %>
<% end %>
だから、私が言ったように、これを自動保存したいのです。それを達成し始めるために、私はこのautosave_comments.jsファイルを書きました:
$(document).ready(function(){
setInterval(function() {
$('new_comment .temp').html('<input type="hidden" name="comment[draft]" id="comment_draft" value="true" />');
$('#comment_form form[data-remote]').submit();
$('new_comment .temp').html('');
}, 10000);
});
このコードは、ドラフトの入力をtrueに設定し、フォームを送信してから、ドラフトの入力を削除します。このコードは、フォームを送信してドラフトをコントローラーに保存するため、うまく機能します。ただし、最初のエントリを更新するのではなく、すべての送信で新しいエントリが保存されます(つまり、10秒ごとに新しいコメントが下書きとしてデータベースに保存されます)。
背景の最後のビット:フォームがコメントコントローラーに送信されると、作成アクションに送信されます。
def create
@comment = params[:comment]
if @post.save
if params[:draft]
flash.now[:notice] = "draft autosaved"
else
flash.now[:success] = "comment created"
end
else
#code to output errors
end
respond_to do |format|
format.html
format.js
end
end
次に、これはcreate.js.erbファイルを参照します。
<% post = user.posts.last %>
<% if post.draft == false %>
//code here deals with a true submission of a comment, to append tables etc.
<% else %>
//maybe some code here could alter the form on draft submission to make it update the same post next time?
<% end %>
ですから、最初のドラフト提出がそれと同じように機能し、コメントテーブルにエントリを作成したいと思います。しかし、その後、フォームが後続の自動保存でそのコメントを更新し、その人が投稿のためにコメントを送信したときに、コメントをドラフトではない最終コメントとして保存する必要があります。これらのファイルの1つに、これを達成できる概要がある場所がありますか?
ありがとう!