Поскольку вы просите "путь рельсов", вы должны настроить его на "старые рельсы" без InheritedResources
.
class CompaniesController < ApplicationController
before_action :authorize_company, except: [:new, :index]
def new
@company = authorize(Company.new)
end
def index
@companies = policy_scope(Company)
end
# ...
private
def authorize_company
@company = authorize(Company.find(params[:id]))
end
end
Если вы действительно хотите чтобы использовать обратные вызовы, вы должны сделать это следующим образом:
class CompaniesController < ApplicationController
before_action :authorize_company, except: [:new, :index]
before_action :authorize_companies, only: [:index]
before_action :build_company, only: [:new]
# ...
private
def authorize_company
@company = authorize(Company.find(params[:id]))
end
def authorize_companies
@companies = policy_scope(Company)
end
def build_companies
@company = authorize(Company.new)
end
end
Да, вы можете написать один метод обратного вызова с тремя ветвями кода, но это имеет меньшую циклическую сложность c, и каждый метод выполняет одну работу.