что такое RESTful способ сохранить черновики сообщений? - PullRequest
5 голосов
/ 09 октября 2011

У меня есть пост-контроллер на небольшом тестовом веб-сайте, который я создаю.Я хочу, чтобы на сайте была функция «сохранить черновик» / 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 для сохранения черновиков: я должен добавить атрибут «черновик» кпост модель?Или создать черновик сообщения модели?

ОК, пожалуйста, прокомментируйте, если мне нужно предоставить больше информации.Мне интересно услышать мнение людей!Спасибо всем!

1 Ответ

3 голосов
/ 09 октября 2011

Автосохранение:

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 модели с «черновым» логическим значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...