Я сушка некоторого кода, один из этого refactors выглядит следующим образом:
У меня есть 3 контроллера (ConstructionCompanies, RealEstateCompanies, люди), все из которых имели следующую закономерность:Является ли это слишком сухим, я собираюсь за борт?
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
Как вы можете видеть, что correct_user повторяется в каждом контроллере.
Так что я внутри я хелпер, который включен для всех из них я создал метод:
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
Know внутри каждого контроллера у меня есть:
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
Мне нравится тот факт, что сейчас СУХО, но проблема в том, что мне кажется, что это сложно для меня, трудно понять. Я зашел слишком далеко?
@KandadaBoggu: Я даже не видел. Wow, nice catch xD – Matchu
Это был большой A **, который сложно пропустить ... :-) –