gpt4 book ai didi

ruby-on-rails - 在产品购买时将多条记录添加到数据库

转载 作者:数据小太阳 更新时间:2023-10-29 08:11:01 24 4
gpt4 key购买 nike

编辑 #1

这是我在支付 Controller 中尝试创建 CourseModulesUser 的方法

CourseModules.count do
CourseModulesUser.create.times(
course_module_id: @course_module_id,
courses_user_id: @courses_user_id,
complete: false
)
end

我有一个类(class)模块,但为了创建用户,我需要能够计算购买类(class)的模块数,然后在 CourseModulesUser 中创建记录,获取 course_user_id 和 course_module_id。

image

原始问题

场景:

我有类(class)和模块,当用户购买类(class)时,会为该类(class)创建用户(有点像注册),但是,当购买类(class)时,我还希望模块进入单独的表格在 course_module_id 和 courses_user_id 中。

但是,每门类(class)有多个模块,

这是支付 Controller

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

这是我创建类(class)用户的地方

CoursesUser.create(
course_id: @course.id,
user_id: @user.id,
complete: false
)

这行得通

image

但我有一个单独的 course_modules_users 表

image

例如,假设我有一个包含两个模块的类(class),一个 id 为 1 的类(class)和一个 id 为 1 的用户,我理想情况下会有这样的东西

id  course_module_id   courses_user_id   complete
1 1 1 false
2 2 1 false

因此,当用户购买类(class)时,两个模块都应该在该表中创建记录。

这是我的模型

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 的简单编辑。

最佳答案

根据我希望如何以及何时创建 CourseModelUser 的记录,我有两种方法可以做到这一点:

  1. 我希望在创建 CourseUser 的同时创建记录(如果 CourseUser 由于任何原因没有创建,则 CourseModuleUser 也不应该被创建)。此代码与支付 Controller 中的 CourseUser 创建一起使用。

    ActiveRecord::Base.transaction do
    CoursesUser.create(
    course_id: @course.id,
    user_id: @user.id,
    complete: false
    )
    module_ids = CourseModule.where(course_id: @course.id).pluck(:id)
    module_ids.each do |module_id|
    CourseModuleUser.create(
    course_module_id: module_id,
    courses_user_id: @user.id,
    completed: false
    )
    end
    end
  2. 我只想在创建 CourseUser 模型后创建 CourseModuleUser。此代码位于 CourseUser 模型中。

    after_commit :create_couser_module_user

    def create_module_user
    module_ids = CourseModule.where(course_id: self.course_id).pluck(:id)
    module_ids.each do |module_id|
    CourseModuleUser.create(
    course_module_id: module_id,
    courses_user_id: self.id,
    completed: false
    )
    end

注意:答案假定您具有以下模型结构:

class Course
..
has_many :course_modules
..
end

class CourseModule
..
belongs_to :course
..
end

关于ruby-on-rails - 在产品购买时将多条记录添加到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52405846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com