Обновление данных Rails в одной модели с контроллера другой модели - PullRequest
1 голос
/ 08 апреля 2011

У меня есть модель пользователя с идентификатором billing_id.У меня есть модель Order, которая выполняет транзакции с платежным шлюзом, который возвращает идентификатор биллинга, который я хотел бы сохранить в столбце billing_id в модели User.Я думаю, что я путаю основы архитектуры MVC.

У меня сложилось впечатление, что UsersController и OrdersController обновляют данные своих соответствующих таблиц.Означает ли это, что если я получаю что-то из OrdersController, например, идентификатор биллинга, нет другого способа сохранить этот идентификатор биллинга в столбце billing_id в модели User?Спасибо и извините, если это очень элементарно.:)

Кроме того, я подумал, что возможное решение может заключаться в том, чтобы каким-то образом передать возвращаемое значение через ApplicationsController в UsersController для сохранения в таблице User.Возможно ли это?

1 Ответ

1 голос
/ 08 апреля 2011

В таблице пользовательских заказов должен быть экземпляр 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

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

EDIT:

Orders.find(ORDER_ID).user.update_attributes(:billing_id => BILLING_ID)
...