No todos los modelos necesariamente son solo ActiveRecord
Crear una abstracción (porque involucra muchos modelos) PORO (Plain Old Ruby Object)
Tambien:
Estos son los problemas con los que cuenta el código.
class UsersController < ApplicationController
def suspend
@user = User.find(params[:id])
@user.suspend!
redirect_to @user, notice: 'Successfully suspended.'
end
end
class User < ActiveRecord::Base
has_many :items
has_many :reviews
def suspend!
self.class.transaction do
self.update!(is_approved: false)
self.items.each{ |item| item.update(is_approved: false) }
self.reviews.each{ |review| review.update(is_approved: false) }
end
end
end
class UserSuspension
def initialize(user)
@user = user
end
def create
@user.class.transaction do
disapprove_user!
disapprove_items!
disapprove_reviews!
end
end
private
def disapprove_user!
def disapprove_items!
def disapprove_reviews!
end
class UsersController < ApplicationController
def suspend
@user = User.find(params[:id])
suspension = UserSuspension.new(@user)
suspension.create!
redirect_to @user, notice: 'Successfully suspended.'
end
end