#ruby-on-rails #controllers #rails-models
#ruby-on-rails #контроллеры #rails-модели
Вопрос:
У меня есть пользовательская модель, которая имеет billing_id. У меня есть модель заказа, которая запускает транзакции с платежным шлюзом, который возвращает идентификатор выставления счета, который я хотел бы сохранить в столбце billing_id в пользовательской модели. Я думаю, что я путаю основы архитектуры MVC.
У меня сложилось впечатление, что UsersController и OrdersController обновляют данные своих соответствующих таблиц. Означает ли это, что если у меня есть что-то, возвращенное из OrdersController, например, идентификатор выставления счета, нет другого способа сохранить этот идентификатор выставления счета в столбце billing_id в пользовательской модели? Спасибо и извините, если это крайне элементарно. 🙂
Кроме того, я подумал, что возможным решением может быть каким-то образом передать возвращаемое значение через ApplicationsController в UsersController для сохранения в пользовательской таблице. Возможно ли это?
Ответ №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)
Комментарии:
1. Спасибо Gazler. Я уже настроил это таким образом. В настоящее время меня беспокоит, как я мог бы получить возвращаемое значение при создании нового заказа и сохранить в пользовательской таблице из OrdersController. Спасибо за ввод
2. Зачем вам нужно сохранять это значение для пользователя? Это не связано с заказом? Не могли бы вы, пожалуйста, уточнить?
3. Да. billingID возвращается, когда номер кредитной карты сохраняется в базе данных платежных шлюзов. Я хотел иметь столбец billingID в таблице User и сохранить его там, а не в таблице Order, потому что billingID возвращается только при сохранении новой кредитной карты.
4. Большое вам спасибо. Итак, возможно ли обновить атрибут пользовательской таблицы из OrdersController? Я думаю, что это фундаментальная проблема MVC, которую я не смог хорошо понять.
5. Я предполагаю, что в вашем OrdersController у вас есть переменная order . Поэтому замените Orders.find(ORDER_ID) на @order .