Рельсы 3, мелкие маршруты - PullRequest
8 голосов
/ 09 апреля 2011

В рельсах 2.x я использовал неглубокие маршруты, но, кажется, этого не хватает в рельсах 3 (по крайней мере, в API http://apidock.com/rails/ActionController/Resources/resources).

Когда я передаю эту опцию в рельсах 3, она не выбрасываетникаких ошибок, но я также не получаю все ожидаемые маршруты.

Rails 3 router.rb

  resources :users, :shallow=>true do
    resources :recipe do
      resources :categories do
        resources :sections do
          resources :details do
          end
        end
      end
    end
  end

Маршруты отсутствуют , которые были созданы с помощьюэквивалент rails 2.x (просто пример ресурса рецепта):

GET new_recipe (у меня есть только new_user_recipe) и

POST рецепт (для создания нового рецепта я толькоhave POST user_recipe)

В некотором смысле имеет смысл, что эти маршруты не будут сгенерированы, но мой старый код обошел его, передавая user_id в каждой форме (менее элегантно, согласовано).

Вопрос: есть ли документация для «неглубоких» маршрутов в рельсах 3? Есть ли способ генерировать маршруты, которые мне не хватает в рельсах 2.x?

Спасибо, Майк

Ответы [ 4 ]

5 голосов
/ 09 апреля 2011

Вам необходимо применить параметр: shallow к вложенным ресурсам. Это должно дать вам то, что вы хотите:

  resources :users do
    resources :recipe, :shallow=>true do
      resources :categories do
        resources :sections do
          resources :details do
          end
        end
      end
    end
  end  
3 голосов
/ 06 октября 2011

Если вы посмотрите на документы Rails 3, вы увидите, что shallow - это метод экземпляра для ActionDispatch::Routing::Mapper::Resources, такой же как resource, resources, match и т. Д. Вы должны быть в состоянии Гнездятся неглубокие маршруты с чем-то вроде этого:

shallow do
  resources :users do
    resources :recipe do
      resources :categories do
        resources :sections do
          resources :details
        end
      end
    end
  end
end

Хотя кажется, что они расширяются только до 2 уровней, а не до полного вложенного маршрута. Проверьте rake routes для более.

0 голосов
/ 28 декабря 2015

Разумно, что у вас есть только new_user_recipe вместо new_recipe. Зачем? Потому что с точки зрения рецепта, каждый рецепт во многом принадлежит пользователю.

Другое дело, что

resources :users, :shallow=>true do
  resources :recipe do
    resources :categories do
      resources :sections do
        resources :details do
        end
      end
    end
  end
end

точно так же, как

resources :users do
  resources :recipe, :shallow=>true do
    resources :categories do
      resources :sections do
        resources :details do
        end
      end
    end
  end
end

:shallow наследуется, как указали другие пользователи. Подумайте об этом, :shallow означает, что вы можете опустить левую часть шаблона URL, если вы точно уверены, над каким именно ресурсом вы работаете. Если вы поместите :shallow на самый внешний слой вашего ресурса, он должен иметь тот же эффект, что и второй слой (рецепт в вашем примере). Поскольку вам нечего пропустить, когда вы работаете с самым внешним ресурсом (пользователи в вашем примере), это уже самая левая часть шаблона URL, и его нельзя пропустить.

0 голосов
/ 16 августа 2012

Документацию Rails 3, касающуюся вложенных или неглубоких маршрутов, можно найти на сайте Rails Guides .

В совете о том, как вкладывать маршруты, в нем, в частности, говорится, что «ресурсы никогда не должны быть вложены глубже, чем на один уровень».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...