Обновление данных Rails в одной модели с контроллера другой модели
У меня есть модель пользователя, которая имеет billing_id. У меня есть модель Order, которая выполняет транзакции с платежным шлюзом, который возвращает идентификатор биллинга, который я хотел бы сохранить в столбце billing_id в модели User. Я думаю, что я путаю основы архитектуры MVC.
У меня сложилось впечатление, что UsersController и OrdersController обновляют данные своих соответствующих таблиц. Означает ли это, что если я получаю что-то из OrdersController, например, идентификатор биллинга, нет другого способа сохранить этот идентификатор биллинга в столбце billing_id в модели User? Спасибо и извините, если это очень элементарно.:)
Кроме того, я подумал, что возможное решение может состоять в том, чтобы как-то передать возвращаемое значение через ApplicationsController в UsersController для сохранения в таблице User. Это возможно?
1 ответ
Ваша таблица заказов пользователя должна иметь экземпляр user_id, так как пользователь может иметь несколько заказов.
Вы можете сделать это, создав миграцию:
rails g migration add_user_id_to_orders order_id:integer
rake db:migrate
Ваши модели будут выглядеть так:
class User < ActiveRecord::Base
has_many :orders
end
class Order < ActiveRecord::Base
belongs_to :user
end
Вам нужна связь между ними (order_id), иначе они не будут знать друг друга. Это известно как внешний ключ.
Когда все настроено таким образом, вы можете получить пользователей, выполнив:
User.find(1).orders
И вы можете найти информацию о пользователе из заказа, выполнив:
Orders.find(1).user
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ:
Orders.find(ORDER_ID).user.update_attributes(:billing_id => BILLING_ID)