1
我是Ruby/RoR的新手。 这是services/create_subscription.rb
。我想添加服务类,因为我想封装逻辑。)回滚并返回错误而不是零的实例
我想回滚并将订阅错误放在Controller中。 这里的问题是回滚确实有效,但返回nil
。 这应该返回subscription.errors[:base] << e.message
和回滚,如果API调用以某种方式失败。
重构代码的任何想法?
class CreateSubscription
def self.call(course, email_address)
ActiveRecord::Base.transaction do
user = CreateUser.call(email_address)
subscription = Subscription.new(
course: course,
user: user
)
begin
book_sub = nil
if user.book_customer_id.blank?
customer = Book::Customer.create(
email: user.email,
course: course.book_id,
)
user.customer_id = customer.id
user.save!
book_sub = customer.books.first
else
customer = Book::Customer.retrieve(user.book_customer_id)
book_sub = customer.books.create(
course: course.book_id
)
end
subscription.book_id = book_sub.id
subscription.save!
rescue Book::BookError => e
subscription.errors[:base] << e.message
raise ActiveRecord::Rollback
end
subscription
end
end
end