2012-03-26 1 views
0

Простите меня, если на это был дан ответ. Я провел несколько часов, ища ответ на этот вопрос здесь и в Google.Обновить модель с ответом API после отправки формы, в которой используются вложенные атрибуты

Я только начинаю с Ruby on Rails. Я пытаюсь обновить модель данными из ответа API после сохранения данных, первоначально представленных через форму, на две разные модели.

Итак, у меня есть модель пользователя и модель персонажа. Форма регистрации собирает данные о пользователе и их персонаже. Чтобы сделать запрос API, я должен хотя бы получить несколько деталей о символе, который будет передан как часть запрошенных атрибутов (например, имя, область).

Так я использую form_for с вложенными атрибутами:

<%= form_for(@user) do |f| %> 
     <%= render 'shared/error_messages' %> 

     <%= f.label :username %> 
     <%= f.text_field :username %> 

     <%= f.label :first_name %> 
     <%= f.text_field :first_name %> 

     <%= f.label :last_name %> 
     <%= f.text_field :last_name %> 

     <%= f.label :email %> 
     <%= f.text_field :email %> 

     <%= f.label :password %> 
     <%= f.password_field :password %> 

     <%= f.label :password_confirmation, "Password Confirmation" %> 
     <%= f.password_field :password_confirmation %> 

     <%= f.fields_for :characters do |builder| %> 

     <%= builder.label :realm %> 
     <%= builder.text_field :realm %> 

     <%= builder.label :name %> 
     <%= builder.text_field :name %> 

     <% end %> 

     <%= f.submit "Sign Up" %> 
<% end %> 

Это успешно представляет всю информацию пользователя, представленного в модели пользователя и области и имя представленного модели персонажа. Проблем нет. Тем не менее, у меня есть еще несколько полей, которые я хочу заполнить для записей символов, только что созданных из API, который предоставляет всю информацию о символе. Каков наиболее эффективный способ сделать это, чтобы после отправки формы она обновляла запись (или добавляла данные до сохранения записи) с данными, возвращаемыми из API.

Мне не нужна помощь по конкретным полям и возвращенным данным. У меня есть все работающие, я просто ищу способ сделать запрос API и завершить запись со всеми данными сразу после отправки формы.

ответ

0

Предлагается использовать обратный вызов (: after_create).

В зависимости от обработки API вы можете выбирать между ними. : after_save : before_save : before_create

С любой обратный вызов просто получить данные из вашего API и заполнить другой символ информация годов.

Надеюсь, что это поможет. Удачи .

+0

Хорошо, я попробую это (: before_save). Я реализую это в родительской модели? Также как мне получить доступ к вложенным данным формы для использования в функции обратного вызова? – Valjas

+0

Да, вы можете реализовать это в родительской модели и создать дочерний элемент с функцией объединения рельсов. Взгляните на краткий: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – Vik

+0

Спасибо Vik! Я смог получить все это, используя обратный вызов (after_save), чтобы обновить запись, используя метод .last. Эта ссылка, которую вы мне дали, была очень информативной. Это именно то, что я искал, насколько объединяются ассоциации. – Valjas