Обновление данных 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)
Другие вопросы по тегам