Однажды у меня была такая же проблема, вероятно, хорошая идея - сначала создать заметку.
Другой способ - отправить пользователя к новому действию.Когда происходит первое сохранение, вы отправляете новый объект обратно в виде объекта 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