2014-09-04 3 views
0

Это вопрос процесса обновления значений модели для существующей записи. Скажем, у меня есть модель пользователя. Пользователи регистрируются с именем и электронной почтой с помощью проверки подлинности. Затем у меня есть еще две формы на сайте для сбора дополнительных входных данных.Rails 4 - Обновление модели через несколько форм

Форма 1 хранит данные оплаты и использует метод обновления def. Предположим, что метод обновления имеет некоторый код полосы.

Форма 2 просто запрашивает любимый цвет пользователя и хочет, чтобы он был сохранен в модели. Может сформировать 2, все еще используют метод обновления с некоторым оператором if или нам нужен настраиваемый маршрут, указывающий на метод типа def color.

У меня возникли проблемы с обновлением модели с использованием формы 2. И вместо того, чтобы публиковать данные (это еще не решение), я хотел получить представление о том, каким будет лучший процесс. Вставить данные в модель должно быть довольно просто. Я думаю, что мне не хватает чего-то основного.

+0

Вы можете использовать многоэтапную форму для этого https://github.com/schneems/wicked. Это включает в себя все детали, как построить многоступенчатую форму, также имеющую railscast для этого, чтобы вы могли легко ее реализовать. –

+0

Я не думаю, что хочу многоступенчатую форму. Это будет одна форма на нескольких страницах? Я хочу несколько разных форм. – Moosa

+0

Вы должны уважать методы CURL. Если 2 формы будут обновлять модель 'A', вы будете использовать метод' AsController.update' для двух форм. Единственный оператор 'if', который вы можете добавить, - это перенаправление на разные страницы после процесса обновления, передача информации в скрытое поле вашей формы. Если 2 формы обновляют 2 варианта моделей 'A' и' B', то соответственно используют методы 'AsController.update' и' BsController.update'. – pierallard

ответ

1

Может образовывать 2-прежнему использовать способ обновления

Да


Ajax

Что вы будете искать в Ajax - Asynchronous Javascript & XML - метод отправка запросов на ваш сервер Rails из области вашего т ypical HTTP-поток.

Вы должны помнить, что Rails, благодаря построению на HTTP, составляет stateless. Это означает, что у него нет абсолютно «памяти», если, конечно, вы не храните данные для будущего использования.

Причина, по которой это важно, заключается в том, что когда вы отправляете свои «обновления» на ваш сервер, вам все равно, если вы уже отправили запрос; это будет просто взять информацию, передаваемую & слепо выполнять задачи, которые он хочет:

#view 
<%= form_for @user, method: :patch, remote: true, id: "form1" do |f| %> 
    <%= f.text_field :color %> 
    <%= f.submit %> 
<% end %> 

<%= form_for @user, method :patch, remote: true, id: "form2" do |f| %> 
    <%= f.text_field :other_input %> 
    <%= f.submit %> 
<% end %> 

Вы можете read up more about Rails UJS here - обе формы отправить запрос на метод update и будет посылать различные данные. Это даст вам возможность отправить необходимые вам данные с помощью два отдельных форм

-

Response

Если вы хотите, чтобы затем захватить ответ от формы, вы будете способный создать следующий Javascript:

#app/assets/javascripts/application.js 
$(document).on("ajax:success", "#form1", function(status, data, xhr){ 
    // something here 
}); 
Смежные вопросы