Rails - при вызове NEW создать запись перед отображением формы? - PullRequest
1 голос
/ 26 октября 2010

Вот что я пытаюсь сделать.

когда пользователь нажимает новую заметку. Я хочу, чтобы пользователь перенаправлялся на страницу, когда он мог начать печатать заметку, и сохранял ее на сервере с помощью AJAX.

Проблема в том, что каждый раз, когда страница сохраняется, она делает новую заметку.

Это наводит меня на мысль, что когда Rails получает контроллер DEF NEW, то, как мне нужно, чтобы rails сначала делал запись NEW NOTE, а затем перенаправлял на контроллер редактирования этой новой заметки, где пользователь может создавать / редактировать заметку. все с AJAX.

Мысли? Спасибо.

Ответы [ 2 ]

2 голосов
/ 26 октября 2010

Однажды у меня была такая же проблема, вероятно, хорошая идея - сначала создать заметку.

Другой способ - отправить пользователя к новому действию.Когда происходит первое сохранение, вы отправляете новый объект обратно в виде объекта JSON и заменяете действие формы на URL-адрес обновления для этой записи, а также устанавливаете метод формы для установки.

Таким образом, вы этого не делаетев конечном итоге в базе данных останутся пустые записи (с вашим вариантом использования вы, возможно, захотите именно это, поэтому пользователь может продолжить запись позже.)

Только мои два цента.

Ok aспособ реализации этого может выглядеть следующим образом:

Форма

<%= form_for resource, 
             :remote => true, 
             :html => { 'id' => 'autosave' }, 
             :url => resources_path(:format => :json) do |f| %>
  ...
<% end %>

Приложение JS

var $form = $('#autosave');

// bind to the first success event from the form
$form.one('ajax:success', function(data, status, xhr) {
  // data contains our json object (your note as json)
  // now we update the form
  $form.attr('action', '/notes/' + data.id);
  $form.attr('method', 'put');
  $form.attr('data-method', 'put');
});

Контроллер

class ExampleController
  ...

  def create
    #
    # respond with the json object if format = json,
    # see the form above I'm passing the format with :url parameter in form_for
    #
    respond_with(resource) do |format|
      format.json { render :json => resource }
    end
  end
end
1 голос
/ 26 октября 2010

Если вы действительно хотите использовать #new для создания и сохранения заметки, тогда вы можете просто сделать

def new
  @note = Note.create # instead of Note.new
end

Rails отобразит эту заметку так же, как действие #edit, поэтому идентификатор заметки будет находиться в скрытом поле. Затем, когда вы отправите вызовы Ajax, вы будете звонить #edit. Если вы хотите сохранить поведение #new, когда javascript выключен, вы можете создать другое действие.

def new
  @note = Note.new
end

def new_js
  @note = Note.create
end

Когда вы загружаете страницу, на которой есть ссылка на new_note, включите некоторый JavaScript, который изменяет ссылку на new_js_note. Поэтому, когда JS выключен, вы получаете стандартную форму #new. Когда JS включен, вы получаете форму, которая в основном редактирует существующую пустую заметку.

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