Вы можете углубляться во вложенные маршруты так, как вам хочется, но имейте в виду, что только то, что вы можете, не означает, что вы должны это делать. Чем глубже вы копаете, тем больше работы вы создаете для себя.
Шаблон, который я видел, состоит в том, что для каждого уровня глубины вам нужно создать базовый контроллер, который обрабатывает родительские параметры, и подкласс, который обрабатывает специфику. Это имеет тенденцию разыгрываться в соответствии с:
Customer::BaseController < ApplicationController
CustomerController < CustomerController:: BaseController
Customer::Orders::BaseController < Customer::BaseController
Customer::OrdersController < Customer::Orders::BaseController
Customer::Orders::Items::BaseController < Customer::Orders::BaseController
Customer::Orders::ItemsController < Customer::Orders::Items::BaseController
BaseController в каждом случае обрабатывает загрузку и интерпретацию параметров в общем виде, например:
class Customer::BaseController < ApplicationController
before_filter :load_customer
protected
def load_customer
@customer = Customer.find(params[:customer_id] || params[:id])
rescue ActiveRecord::RecordNotFound
render(:partial => 'customer_not_found', :layout => 'application', :status => :not_found)
end
end
Как вы видите, это может немного запутаться, если вы наметите свое приложение таким образом. У тебя тоже очень длинные маршруты.
Если ваша база данных спроектирована так, что записи являются довольно автономными, и от них может быть извлечено много информации о взаимоотношениях, то вам не обязательно идти ко всем этим неприятностям. Страница заказа может содержать ссылки на @ order.customer без указания customer_id в пути.