Domanda

Sto usando ereditate_resources per asciugare i miei controller, ma non riesce a capire come creare un determinato controllore comportarsi correttamente. Nel mio modello, User has_one Person. Voglio che sia opzionalmente annidato, comportarmi come un singleton quando annidato, e come non-singleton quando non annidato. In altre parole, voglio essere in grado di elencare tutte le persone conosciute (/ persone), ottenere la persona # 5 (/ persona / 5) e ottenere solo l'unica persona dell'utente (/ utente / 10 / persona). Quanto segue in routine.rb:

resources :users
  resource :person
end
resources :people
.

... Imposta i percorsi come mi aspetto:

         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
.

... così grande. Ora, se nel PeopleController, uso:

belongs_to :user, :optional => true
.

... quindi gli URL non annidati / persone funzionano, ma gli URL NESTED / UTENTI /: URLS_ID_ID / PERSONA non sono: undefined method 'people' Se, invece, nel PeopleController, uso:

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

... poi gli URL NESTED / UTENTI /: URLS_ID_ID / Person URL, ma gli URL non annidati / persone non sono perché viene trattata come un singleton, anche quando non annidato: undefined method 'person'

Sommario: c'è un modo per rendere Erehered_Resources gestire una risorsa come Singleton a cui si accede tramite una rotta annidata, ma come non singole da singleton quando si accede tramite una rotta non nidificata?

È stato utile?

Soluzione

Nel caso qualcuno stia cercando di fare qualcosa di simile, ho finito per aver appena abbandonato ereditato.Sto trovando che sono più felice con meno "magia" in corso nei miei controllori.

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top