Я новичок в Ruby/RoR. Это services/create_subscription.rb
. (Я добавляю класс обслуживания, потому что я хотел инкапсулировать логику.)Пример возврата и возврата с ошибкой вместо нуля
Я хотел бы откатить и отключить ошибки подписки в контроллере. Проблема в том, что Rollback действительно работает, но возвращает 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