Я сушу некоторый код, один из этих рефакторов выглядит следующим образом:
У меня есть 3 контроллера (ConstructionCompanies, RealEstateCompanies, People), каждый из которых имеет следующий шаблон:
class ConstructionCompaniesController < ApplicationController
before_filter :correct_user, :only => [:edit, :update]
private
def correct_user
@company = ConstructionCompany.find(params[:id])
if(current_user.owner != @company.user)
redirect_to(root_path)
end
end
class RealEstateCompaniesController < ApplicationController
before_filter :correct_user, :only => [:edit, :update]
...
private
def correct_user
@company = RealEstateCompany.find(params[:id])
if(current_user.owner != @company.user)
redirect_to(root_path)
end
end
Как вы видите, правильный_пользователь повторяется в каждом контроллере.
Итак, что я сделал внутри, я помог, который включен для всех них, я создал метод:
def correct_user_for_seller_of_controller(controller)
#"User".classify will return the class User etc.
@seller = controller.controller_name.classify.constantize.find(params[:id])
redirect_to(root_path) unless (current_user == @seller.user)
end
Знай, внутри каждого контроллера у меня есть:
class ConstructionCompaniesController < ApplicationController
before_filter :only => [:edit, :update] do |controller| correct_user_for_seller_of_controller(controller) end
class RealEstateCompaniesController < ApplicationController
before_filter :only => [:edit, :update] do |controller| correct_user_for_seller_of_controller(controller) end
Мне нравится тот факт, что сейчас СУХОЙ, но проблема в том, что мне кажется немного сложным, трудным для понимания. Я зашел слишком далеко?