Как сделать унаследованный ресурс, необязательный вложенный как синглтон?
-
13-12-2019 - |
Вопрос
Я использую унаследованные_респорты, чтобы высушить мою контроллер, но не может понять, как сделать конкретный контроллер правильно. В моей модели генеракодицетагкод. Я хочу, чтобы это было необязательно вложено, ведут себя как синглтон, когда вложенный, а как неинтеретенна, когда не вложенный. Другими словами, я хочу иметь возможность перечислять всех известных людей (/ людей), получить человека № 5 (/ лицу / 5) и получить единственный человек пользователя 10 (/ User / 10 / человек). Следующее в маршрутах .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-адреса, но вложенные / пользователям /: URL user_id / rufets не: User has_one Person
, если, вместо этого, в peoplecontroller, я использую:
belongs_to :user, :optional => true, :singleton => true
.
... Тогда вложенные / пользователи /: USER_ID / INFER URL-адреса работают, но не вложенные / люди URL-адреса не связаны с тем, потому что он рассматривается как синглтон, даже когда не вложенный: undefined method 'people'
Резюме: Есть ли способ сделать унаследование_Resources обрабатывать ресурс в качестве синглтона при доступе через вложенный маршрут, но в качестве неинтефона при доступе через не вложенный маршрут?
Решение
В случае, если кто-то пытается сделать что-то подобное, я закончил просто отказаться от унаследованных_ореспортов.Я нахожу, что я счастлив с меньшей «магией», происходящим в моем контроллерах.
Другие советы
Это, очевидно, не поддерживается: https://github.com/josevalim/ruited_resources/issues/169