Dwa identyczne kontrolery, operujące na podobnych, ale różnych modelac

Mam dwa prawie identyczne kontrolery:

[code=Ruby]class CompanyCategoriesController < ApplicationController
allow :show, :user => :is_root?

def index
@categories_roots = CompanyCategory.roots
end

def show
@category = CompanyCategory.find(params[:id])
respond_to do |wants|
wants.js { render :layout => false }
end
end
end

class TenderCategoriesController < ApplicationController
allow :show, :user => :is_root?

def index
@categories_roots = TenderCategory.roots
end

def show
@category = TenderCategory.find(params[:id])
respond_to do |wants|
wants.js { render :layout => false }
end
end
end[/code]
Są tam jeszcze akcje create i destroy, które też wyglądają analogicznie. Jak to najładniej połączyć? Czy raczej nie ma to sensu, bo w sumie to prosty CRUD?

Jeśli kontrolery są identyczne, to możesz stworzyć sobie klasę bazową dla obu kontrolerów z całym kodem CRUDa. Zamiast TenderCategory / CompanyCategory, wywołaj jedynie metodę category_class którą zdefiniujesz sobie w kontrolerach dziedziczących, która zwróci obiekt żądanej klasy:

def category_class TenderCategory end

Zbyt proste, by działało, ale działa. :slight_smile: Dzięki, właśnie o to mi chodziło. 20 linijek mniej i kod o wiele bardziej suchy.