6

私が作成している小さなテストWebサイトに投稿コントローラーがあります。サイトには「ドラフトの保存」/combo-auto-save機能が必要です。これは、ユーザーが離れて終了するために戻ってくる可能性のある長い投稿がサイトにあるためです。ただし、これまでRailsアプリ(または任意のアプリ)に自動保存/保存機能を組み込んだことはありません。そうするための良い、RESTfulな方法は何ですか?

これが私の現在のコントローラーアクションです:

posts_controller.rb

 def create

 @post = params[:post]
 if @post.save
     flash.now[:success] = "Post created!"
 else 
     render_errors_now(@post) 
 end
     respond_to do |format|
           format.html {redirect_to Discussion.find(session[:discussion_id])}
           format.js
     end
 end

ご覧のとおり、ユーザーはリモートで投稿します。

現在のpost.rbモデルは次のとおりです。

 attr_accessible :content, :title
 validates :title, :presence => true 
 validate :title_character_length

 validates :content, :length => { :maximum => 10000 }
 validates :user_id, :presence => true
 validates :discussion_id, :presence => true
 belongs_to :user
 belongs_to :discussion
 default_scope :order => 'posts.created_at ASC'

 def title_character_length
    #some code that checks length
 end

このコードから次のことを実行する必要があります。

  1. 定期的に自動保存(おそらく1分間隔)
  2. 下書きを保存するオプションを与える
  3. 実行する検証を選択します。たとえば、ユーザーが許可された長さを超えるタイトルのドラフトを保存できるようにし、そのタイトルの投稿を実際に投稿できないようにします。

また、ドラフトを保存するためのRailsの優れた方法についても興味があります。投稿モデルに属性「ドラフト」を追加する必要がありますか?または、ドラフト投稿モデルを作成しますか?

さらに情報を提供する必要がある場合は、コメントしてください。人々の意見を聞いてみたいです!みんな、ありがとう!

4

1 に答える 1

4

自動保存:

application.js

$(document).ready(function() {
  setInterval(function() {
    $('form[data-remote]').submit();
  }, 1000*60); // 1000ms * 60s = 1m
});

次に、メッセージを処理するためのが必要にupdate.js.erbなります(たとえば、「保存済み」)。

ドラフトの場合は、別のモデルを作成しPostDraftます。自動保存によってPostDraftオブジェクトが保存され、[公開]などをクリックすると、新しいオブジェクトが作成されてPost削除されPostDraftます。この方法では、PostDraftモデルに検証を行わないだけで、ユーザーは制限よりも長いタイトルを持つことができます。Post「ドラフト」ブール値を使用してモデル内からすべてを実行した場合、これははるかに困難になります。

于 2011-10-08T23:14:50.770 に答える