Как я могу сделать в наследуемом_ресурсе необязательно вложенный как синглтон? - PullRequest
3 голосов
/ 14 марта 2012

Я использую наследуемые_ресурсы, чтобы СУШИТЬ свои контроллеры, но не могу понять, как заставить определенный контроллер работать правильно. В моей модели User has_one Person. Я хочу, чтобы он был произвольно вложенным, вел себя как одиночный, когда вложенный, и как не одиночный, когда не вложенный. Другими словами, я хочу иметь возможность перечислить всех известных людей (/ people), получить человека № 5 (/ person / 5) и получить единственного пользователя 10-го пользователя (/ user / 10 / person). Следующее в маршрутах .rb:

resources :users
  resource :person
end
resources :people

... устанавливает маршруты, как я ожидаю:

         user_person POST   /users/:user_id/person(.:format)                people#create
     new_user_person GET    /users/:user_id/person/new(.:format)            people#new
    edit_user_person GET    /users/:user_id/person/edit(.:format)           people#edit
                     GET    /users/:user_id/person(.:format)                people#show
                     PUT    /users/:user_id/person(.:format)                people#update
                     DELETE /users/:user_id/person(.:format)                people#destroy

              people GET    /people(.:format)                               people#index
                     POST   /people(.:format)                               people#create
          new_person GET    /people/new(.:format)                           people#new
         edit_person GET    /people/:id/edit(.:format)                      people#edit
              person GET    /people/:id(.:format)                           people#show
                     PUT    /people/:id(.:format)                           people#update
                     DELETE /people/:id(.:format)                           people#destroy

... так здорово. Теперь, если в PeopleController, я использую:

belongs_to :user, :optional => true

... тогда не вложенные URL-адреса / people работают, а вложенные / users /: user_id / person urls не: undefined method 'people' Если вместо этого в PeopleController я использую:

belongs_to :user, :optional => true, :singleton => true

... тогда работают вложенные / users /: user_id / person url, но не вложенные / people url не работают, потому что он обрабатывается как одиночный, даже если не вложенный: undefined method 'person'

Сводка: существует ли способ, чтобы атрибут объектатекапервный обрабатывал ресурс как одноэлементный при доступе по вложенному маршруту, а не как одноэлементный при доступе по не вложенному маршруту?

Ответы [ 2 ]

3 голосов
/ 10 июня 2012

В случае, если кто-то пытается сделать что-то подобное, я в итоге просто отказываюсь от наследуемого_ресурса. Я обнаружил, что счастливее, когда в моих контроллерах происходит меньше "магии".

0 голосов
/ 04 февраля 2013

Это явно не поддерживается: https://github.com/josevalim/inherited_resources/issues/169

...