什么是保存草稿帖子的RESTful方式?

时间:2011-10-08 22:27:53

标签: ruby-on-rails ruby-on-rails-3 autosave

我在一个小型测试网站上有一个帖子控制器。我希望在网站上有一个“保存草稿”/组合自动保存功能,因为该网站会有很长的帖子,用户可能想要离开并回来完成。但是,我从未在(或任何应用程序)之前在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. 选择要运行的验证:我希望允许用户例如保存标题超出允许长度的草稿,同时不允许他们实际发布带有该标题的帖子。
  4. 我也很好奇什么是保存草稿的好Rails练习:我应该在帖子模型中添加属性“草稿”吗?或者创建一个草稿帖子模型?

    如果我需要提供更多信息,请评论。我很想听听别人的意见!谢谢大家!

1 个答案:

答案 0 :(得分:3)

自动保存:

<强>的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模型中完成所有操作,那将会更加困难。