2012-02-27 20 views
6

Sono davvero confuso su come farlo.è sbagliato lasciare azioni REST inutilizzate?

Sono stanco e anche frustrato, e il mio cervello è ferito dal guardare cose tanto diverse.

  1. È una pratica scarsa lasciare azioni REST inutilizzate? Per esempio, ho un modello di risorsa e gli utenti possono inviarlo, ma non ho bisogno dell'azione 'indice' per mostrarli perché è gestita dal controller di indice di Home #. Tutto quello che voglio fare è usare link_to per andare alla pagina con un modulo per aggiungere una nuova risorsa. Quindi ora tutto il link_to che sto cercando di fare continua a cercare di andare su/resources quando faccio risorse_path. Ho letto come è possibile utilizzare i metodi "legacy" e collegarli direttamente all'azione nel controller, ma questo è "non il modo delle rotaie". ora sto cercando di scoprire che cosa è il modo in cui le rotaie se non sto utilizzando tutte le diverse azioni REST che rende di default.

  2. fa lo scenario di cui sopra come sto facendo questo giusto? che volevo che fosse in home # index per elencare tutte le risorse piuttosto che le risorse # index?

  3. Se è scarsa pratica, come si creano manualmente? tutti i tutorial che vedo online sono "solo digitare resource :user e sei bravo! non dice cosa fare se non vuoi/hanno bisogno di tutti loro

  4. e se volessi cambiare l'url da predefinito? non mi interessa particolarmente, ma tutti in IRC mi dicono che questo è 'sbagliato', come sta cambiando l'URL sbagliato? Voglio che sia/resource/submit e non/resources/new. Il singular/plural sembra solo fare di più senso per me e sembra più professionale.

  5. dato che io lascio tutto l'url è lo stesso. Se vado a/risorse/nuovo e fare clic su 'submit' sulla forma che dice

Template manca

Missing template 
resources/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/Users/Zesty/Code/gem-portal/app/views" * "/usr/local/lib/ruby/gems/1.9.1/gems/devise-2.0.4/app/views" 

se ho le risorse: le risorse nelle mie vie non ho idea perché non la sua intenzione automaticamente alle risorse # provocano:

def create 
    @resource = Resource.new(params[:resource]) 
    end 

Grazie!

Ecco che cosa è nei miei percorsi dal modo in cui, nel caso in cui tutto è palesemente sbagliato

root :to => 'home#index' 

    resources :resources 
    # match '/resource/submit', :to => 'resources#new' 

    match '/learn', :to => 'pages#learn' 
    match '/contact', :to => 'pages#contact' 
    match '/requests', :to => 'pages#requests' 

risposta

12

1. E 'cattive pratiche di lasciare azioni REST non utilizzati?
Non è una cattiva pratica per quanto posso rispondere. Se non hai bisogno di un'azione indice per un controller, non ce l'hai, punto. Ma ciò che dovresti è escludere questa azione nei tuoi percorsi, ad es. facendo resource :resources, :except => [:index]. Questo può diventare utile quando si esegue il ripristino dagli errori perché un NoTemplateError non è lo stesso di un RoutingError (il che significa che si può perdere qualcosa durante la produzione).

Inoltre, è un simpatico aiutante per lo sviluppo. Quando si scrive accidentalmente un collegamento all'indice del controller non utilizzato, si ottiene un errore nella pagina contenente il collegamento se si esclude l'azione nei percorsi. Se non lo fai, vedrai l'errore solo dopo aver cliccato sul link perché la rotta è valida (ma non ha alcuna funzione/modello/qualunque).

2.lo scenario di cui sopra sembra im farlo correttamente? che volevo che fosse in home # index per elencare tutte le risorse piuttosto che le risorse # index?
Non riesco a rispondere a questa domanda senza approfondire il flusso di lavoro della logica aziendale/dell'applicazione. Ma se non ne hai bisogno, lo lasci.

Se si tratta di un problema estetico (ad esempio, l'indice # risorse è sostanzialmente necessario, ma sotto un altro URL), è possibile semplicemente creare una route match "home", :to => "resources#index". Ciò renderebbe deprecato il tuo controller domestico personalizzato e potresti utilizzare l'azione di indice su resources che sarebbe disponibile in /home e in /resources. Ma ancora una volta, questa potrebbe non essere l'opzione migliore per il tuo flusso di lavoro/logica, quindi questo è solo un suggerimento.

3. Se è scarsa pratica, come si creano manualmente?
C'è una pagina eccellente su Rails guides page su tutte le vostre esigenze di instradamento. Dai un'occhiata qui.

4. Cosa succede se si desidera modificare l'URL da predefinito?
Rails way è convenzione sulla configurazione. Significa che quei metodi sono convenzione di rotaie. È bene attenersi a questa convenzione, quindi ogni volta che torni alla tua app cambiando le cose, sai almeno come funziona a causa di quella convenzione. Anche i programmatori di binari senza alcuna conoscenza della tua app possono apportare modifiche ad esso più rapidamente quando tutti aderiscono a questa convenzione. This RoR vs PHP fun commercial explains this very good.

È possibile modificare quelli, ma non si dovrebbe.

5. Dato che lascio tutto l'URL è lo stesso. Se vado a/resources/new e clicco 'submit' sul modulo dice
Dopo la creazione, di solito si reindirizza a qualcosa o si esegue il rendering della nuova azione all'interno della chiamata di creazione per mantenere le informazioni dell'oggetto corrente (ad es. Errori) che si perderebbe quando si farebbe un reindirizzamento. Stai attualmente rimanendo nell'azione di creazione (nessun rendering/reindirizzamento di un'altra azione) in modo che i binari si aspettino un modello create.html.erb.

Esempio:

def create 
    @resource = Resource.new(params[:resource]) 

    if @resource.save 
    # record valid and saved, so redirecting to /resources/:id 
    redirect_to @resource 
    else 
    # record not valid. rendering the new.html.erb template 
    # (HINT the new action is NOT called here). 
    render :action => :new 
    end 
end 

Tenete a mente che .new crea un nuovo oggetto, ma non è memorizzato nel database a meno che non si chiama per esempio .save su di esso.


Queste sono solo mie opinioni ed esperienze su questo, quindi se qualcuno più esperto pensa che ci sia qualcosa che non va, io sono contento di leggere un commento e aggiornare la mia risposta.

+0

wow eccellente. grazie mille, risposta perfetta. come sidenote, come funziona allora l'impalcatura se usa quel preciso codice d'azione 'crea'? Ho cancellato la roba JSON ma mi sto chiedendo come si possa effettivamente salvare in uno scaffold se il codice che mi dà non include .save ...? – Tallboy

+0

eh, questo dovrebbe includere salvare credo? non ho usato il ponteggio dal binario 2.x quindi non posso davvero dirtelo. – pduersteler

+0

ah, forse l'ho cancellato e non l'ho visto. grazie ancora! – Tallboy

Problemi correlati