Edit # 1
Вот что я пытаюсь в контроллере платежей для создания CourseModulesUser
CourseModules.count do
CourseModulesUser.create.times(
course_module_id: @course_module_id,
courses_user_id: @courses_user_id,
complete: false
)
end
У меня есть модули курса, но для того, чтобысоздайте пользователей, которые мне нужны, чтобы иметь возможность подсчитывать модули для купленного курса, а затем создавать записи в CourseModulesUser, получая идентификатор course_user_id, а также course_module_id.
Оригинальный вопрос
Сценарий:
У меня есть курсы и модули, и когда пользователь покупает курс, он создается для этого курса (вроде как зачисление), когдакурс приобретается. Я также хочу, чтобы модули были помещены в отдельную таблицу, указав в файле course_module_id и courses_user_id.
Однако существует несколько модулей для курса,
Здесь находится контроллер платежей
class PaymentsController < ApplicationController
before_action :authenticate_user!
def create
token = params[:stripeToken]
@course = Course.find(params[:course_id])
@user = current_user
begin
charge = Stripe::Charge.create(
amount: (@course.price*100).to_i,
currency: "gbp",
source: token,
description: params[:stripeEmail],
receipt_email: params[:stripeEmail]
)
if charge.paid
Order.create(
stripe_id: charge.id,
course_id: @course.id,
user_id: @user.id,
total: @course.price,
card_last4: charge.source.last4,
card_type: charge.source.brand,
card_exp_month: charge.source.exp_month,
card_exp_year: charge.source.exp_year
)
CoursesUser.create(
course_id: @course.id,
user_id: @user.id,
complete: false
)
flash[:success] = "Your payment was processed successfully"
end
rescue Stripe::CardError => e
body = e.json_body
err = body[:error]
flash[:error] = "Unfortunately, there was an error processing your payment: #{err[:message]}"
end
redirect_to course_path(@course)
end
end
Здесь я создаю пользователя курса
CoursesUser.create(
course_id: @course.id,
user_id: @user.id,
complete: false
)
, и это работает
Но у меня есть сепТаблица arate для course_modules_users
Итак, скажем, например, у меня есть курс с двумя модулями, и курс с идентификатором 1 и пользователем с идентификатором 1, я быв идеале должно быть что-то вроде этого
id course_module_id courses_user_id complete
1 1 1 false
2 2 1 false
Поэтому, когда пользователь покупает курс, оба модуля должны иметь записи, созданные в этой таблице.
Вот что у меня есть для модели
class CourseModulesUser < ApplicationRecord
belongs_to :course_module
belongs_to :courses_user
after_update :update_courses_user, if: :completed?
def siblings
self.class.where(courses_user_id: self.courses_user_id)
end
def completed!
self.update_attributes(complete: true)
end
def completed?
siblings.all?(&:complete?)
end
def update_courses_user
self.courses_user.completed!
end
end
Но я предполагаю, что это всего лишь простое редактирование в PaymentsController.