2013-04-24 14 views
6

Hanno provato forum, documentazione e suggerimenti sul blog. Convergono in sintassi che per me non risparmi correttamente E instrado attraverso il controller desiderato.Sintassi per instradare Rails form_for al controller personalizzato

Immagine grande, ho due applicazioni software che condividono funzionalità. Per implementare funzionalità condivise, ho avuto Rails generare Shared :: Widgets. Questo MVC funziona bene. Nessun problema con la visualizzazione, l'aggiornamento, la creazione o l'eliminazione utilizzando il routing standard condiviso/widget & ecc.

Quindi, per la funzionalità specifica del prodotto, ho creato due controller: Product1 :: Widgets e Product2 :: Widgets. Entrambi ereditano dal controller Shared :: Widgets. Entrambi sono vuoti tranne per i layout specifici del prodotto.

Questo schema funziona quasi. Quando arrivo a product1/widgets, imposta il layout su product1 e invoca il metodo index di shared/widgets. Il risultato è la visualizzazione di shared/widgets/index.html.erb con layout di product1. Allo stesso modo, quando mi dirigo verso product2/widgets, questo imposta il layout di product2 e invoca il metodo index di shared/widgets. Il risultato è la visualizzazione di shared/widgets/index.html.erb con layout di product2. Perfezionare.

Ma ora arriviamo al form_for. Perché implementa la magia delle rotaie, vuole davvero dirigersi direttamente al controller Shared :: Widgets. Ma non è quello che voglio. Voglio che venga indirizzato al controller del prodotto appropriato in modo da impostare il layout. Le guide hanno generato form_for era qualcosa di simile:

form_for(@shared_widget, :html => { :class => "form"}) do |f| 

ho provato:

form_for([:product1, @widget], :html => { :class => "form"}) do |f| 

ma che duplica namespace (product1_widget_shared_widget_path).

ho provato i seguenti tre formati, ognuno dei quali sembrano correttamente al percorso, e salvare il record, ma il record è vuota (colonne sono vuote):

form_for(@widget, url => "product1/widget", :html => { :class => "form"}) do |f| 

form_for(@widget, url => url_for(:controller => "widget"), :html => { :class => "form"}) do |f| 

form_for(@widget, url => url_for(:controller => "widget", :action => "create"), :html => { :class => "form"}) do |f| 

Qualsiasi aiuto? Se il codice sopra ha errori di ortografia, è dovuto alla trascrizione. Il codice effettivo che ho usato è passato all'interprete. Grazie.

risposta

2

provare questo

form_for(url: { controller: "posts", action: "create" }, html => { :class => "form" }, method: "post") do |f| 
Problemi correlati