2012-03-26 3 views
0

Ich habe zwei verschachtelte Ressourcen, so dass ein Produkt viele Buchungen haben kann. Auf einer Seite in einem anderen Controller möchte ich eine neue Buchung erstellen und da es sich um eine "allgemeine" Buchung handelt, möchte ich, dass ein Auswahlmenü in einem modalen Fenster erscheint, in dem der Benutzer eines der vorhandenen Produkte auswählen und dann zum Buchungsseite.Formular zur Auswahl der ID vor der Übergabe an das 'neue' Formular in Rails

Wie kann ich das tun?

Ich habe kein Problem, das Modal einzurichten und die Seite "Neue Buchung" ist bereits da. Was ich brauche, ist ein Formular, das eine Liste der vorhandenen Produkte generiert, die ausgewählte Produkt-ID auswählt und dann/products /: product_id/bookings/new erhält.

Um zu klären;

Ich habe die beiden in Routen setzen Ressourcen:

resources :products do 
    resources :bookings 
end 

Ein Produkt viele Buchungen hat und damit den Weg eine neue Buchung erstellen wird/products /: product_id/Buchungen/neu.

Ich habe einen anderen Controller mit einer Ansicht, wo ich eine Schaltfläche zum Erstellen einer neuen Buchung möchte. Problem ist, ich weiß nicht, für welches Produkt der Benutzer eine Buchung erstellen möchte, wenn die Schaltfläche "Neue Buchung" angeklickt wird. Um dies zu lösen, war mein Plan, ein modales Fenster zu zeigen, das ein select mit allen Produkten enthält, dass der Benutzer in der Lage sein sollte, ein Produkt auszuwählen und dann zu/products /: product_id/bookings/new mit: product_id als ausgewähltem Produkt weitergeleitet wird.

Im Moment habe ich eine Lösung, die funktioniert, aber es ist nicht sehr nett, ich habe das Formular mit einer Aktion erstellt, um/products /: product_id/bookings/new und with method = get. Dann fange ich mit JavaScript, um die einreichen, um die Aktion ändern und legt dann wieder:

$("#new_booking_form").submit(function() { 
    var product_id = $(this).find('select').val(); 
    var form_action = $(this).attr("action"); 
    var new_form_action = form_action.replace(/product_id/, product_id); 

    $(this).attr("action", new_form_action); 
    $(this).submit(); 
}); 

Diese Lösung funktioniert, ist aber sehr hässlich! Irgendwelche Vorschläge?

Antwort

0

Wenn ich Sie richtig bin zu verstehen, und es ist eine Beziehung, wo Produkt viele Buchungen hat, würden Sie so etwas wie dieses ist Ihr routes.rb

RAILS 3 wollen:

resources :products do 
    resource :bookings 
end 

RAILS 2:

map.resource :products do |product| 
    product.resource :bookings 
end 

leiten sie dann an die Seite mit diesem:

format.html { redirect_to new_product_bookings_url(@product) } 
+0

ich meine Frage bearbeitet, hoffen, dass es jetzt mehr Sinn macht! Danke für deine Antwort. – samuel02

0

Ich glaube, Sie Liste der Produkte mit Verbindungen zur Schaffung Form statt select in modalen Dialog zeigen:

<ul> 
<% Product.all.each do |product| %> 
    <li><%= link_to product.name, new_product_bookings_path(product) %></li> 
<% end%> 
</ul> 
Verwandte Themen