2013-07-03 14 views
25

Come faccio a sapere quali argomenti vengono utilizzati dagli helper in Rails? Ad esempio, come faccio a sapere che url helper richiede solo un parametro sotto? So che questi metodi sono metaprogrammati ma dov'è la loro documentazione?Dov'è la documentazione sugli helper url nei binari?

link_to "New Ticket", new_project_ticket_path(@project) 

risposta

49

È possibile determinare quanti parametri un helper di percorso richiede osservando la definizione di percorso.

Per esempio, si potrebbe avere questo file rotte:

resources :users 

Se è stato eseguito rake routes dalla riga di comando si dovrebbe vedere qualcosa di simile:

users GET /users(.:format)   users#index 
      POST /users(.:format)   users#create 
new_user GET /users/new(.:format)  users#new 
edit_user GET /users/:id/edit(.:format) users#edit 
    user GET /users/:id(.:format)  users#show 
      PUT /users/:id(.:format)  users#update 
      DELETE /users/:id(.:format)  users#destroy 

La prima colonna si dà il nome del percorso. È possibile aggiungere _path o _url per ottenere il nome di un helper del percorso.

La terza colonna mostra lo schema. Qui è dove puoi capire quali sono gli argomenti. Gli argomenti sono le parti precedute da due punti e gli argomenti facoltativi sono mostrati tra parentesi.Ad esempio, il percorso edit_user ha il modello /users/:id/edit(.:format) quali contiene una richiesta argomento (id) e un argomento opzionale (format), che mi dice che ho bisogno di passare almeno un argomento al edit_user_path o edit_user_url aiutante:

edit_user_path(1) # => "https://stackoverflow.com/users/1/edit" 
edit_user_path(2, :html) # => "https://stackoverflow.com/users/2/edit.html" 

È inoltre possibile utilizzare i nomi degli argomenti dal modello come chiavi in ​​un hash:

edit_user_path(id: 3, format: 'js') # => "https://stackoverflow.com/users/3/edit.js" 

Infine, è possibile aggiungere gli argomenti extra che entreranno a far parte della stringa di query:

edit_user_path(id: 4, format: 'json', foo: 1) # => "https://stackoverflow.com/users/4/edit.json?foo=1" 
edit_user_path(5, bar: 2) # => "https://stackoverflow.com/users/5/edit?bar=2" 

Vedere Rails Routing Guide's section on Listing Existing Routes per ulteriori informazioni su rake routes.

+0

Questa è un'ottima risposta! grazie! – lampShade

+1

Ho una route il cui nome è 'admin_account_reset_password' come mostrato da 'rake routes', ma chiamare' admin_account_reset_password_url() 'all'interno di un' ActionMailer' mi dice: "metodo indefinito' admin_account_reset_password_url 'per Admin :: AccountMailer: Class" - thoughts ? –

+0

questa è un'ottima risposta, ma ho letto il link sopra non riesco a trovare il documento menziona 'puoi aggiungere argomenti extra che diventeranno parte della stringa di query', sai dove posso trovare il doc dell'API per il metodo del percorso generato ? – GMsoF

0

Ecco il API doc. Contiene link_to, button_to, link_to_unless, link_to_unless_current, current_page? E mail_to.

link_to(name = nil, options = nil, html_options = nil, &block) 

link_to(body, url, html_options = {}) 
# url is a String; you can use URL helpers like posts_path 

Opzioni

: dati - Questa opzione può essere utilizzata per aggiungere attributi di dati personalizzati.

metodo: simbolo del verbo HTTP: questo modificatore crea dinamicamente un modulo HTML e invia immediatamente il modulo per l'elaborazione utilizzando il verbo HTTP specificato. Utile per i collegamenti che eseguono un'operazione POST in azioni pericolose come l'eliminazione di un record (che i bot di ricerca possono seguire durante lo spidering del tuo sito). I verbi supportati sono: post,: delete,: patch e: put. Tieni presente che se l'utente ha disattivato JavaScript, la richiesta tornerà a utilizzare GET. Se href: '#' è usato e l'utente ha JavaScript disabilitato, fare clic sul collegamento non avrà alcun effetto. Se si sta facendo affidamento sul comportamento del POST, è necessario verificarlo nell'azione del controllore utilizzando i metodi dell'oggetto richiesta per post ?, delete ?,: patch o put ?.

remote: true - Ciò consente al driver JavaScript discreto di effettuare una richiesta Ajax per l'URL in questione anziché seguire il collegamento. I driver ogni forniscono meccanismi per l'ascolto per il completamento della richiesta Ajax e l'esecuzione di operazioni di JavaScript una volta che sono attributi completa

dati

conferma: 'question' - Ciò consentirà al driver JavaScript discreto di richiedere la domanda specificata. Se l'utente accetta, il collegamento viene elaborato normalmente, altrimenti non viene intrapresa alcuna azione.

: disable_with - Il valore di questo parametro verrà utilizzato come valore per una versione disabilitata del pulsante di invio quando il modulo viene inviato. Questa funzione è fornita dal discreto driver JavaScript.