Dodanie nowego rekordu

Witam.

Mam model development i request.

wpisuję adres: development/4 i w params[:id] mam 4.

Mam link_to ‘dodaj żądanie’ i jak go klikam wchodzę na stronę development/4/request/new
Kilkam dodaj i do bazy zapisuje tylko to params[:id] 4 i current_user.id. i działa OK.

Jak ten link_to zamienić na link_to_remote ? link_to_function aby nie przechodzić na stronę
development/4/request/new i tam klikać dodaj nowe żądanie, tylko po kliknięciu na stronie
development/4 w link ‘dodaj żądanie’ było to żądanie zapisywane w bazie.

Dodając normalnie to najpierw wywołujemy
new a potem create a w przypadku ajaksa trzeba wywołać new i create za jednym razem i nie wiem jak to zrobić?

Jak to elegancko zrobić?

Ja bym użył jQuery :wink:
By było pięknie i unobtrusive warto użyć pluginu metadata:
http://plugins.jquery.com/project/metadata

Wtedy masz link:

= link_to "Add request", "#", :class => "{development_id: '#{params[:id]}' }", :id => "new-request"

I kod który wrzucasz do pliku js, wcześniej dołącz jquery i metadatę:

$(document).ready(function() { $('#new-request').click(function() { //użyj pluginu metadata var development_id = data.development_id $.ajax({ type: "POST", dataType: "script", data: "development_id=" + development_id, url: "/development/" + development_id + "/request", success: function(msg) { //funkcja która coś zrobi, np zmieni liczę //requestów //zamiast tego może być template create.js.erb }); }); return false; }); });
Do tego w responds_to dodajesz js, które Ci to obsłuży i powinno działać.

Jest to ogólny zamysł, wydaje mi się, że parę rzeczy można ulepszyć, również kodu nie testowałem :wink:
Ten request idzie od razu do create, ponieważ, jak rozumiem, nie masz tutaj zadnej formy - a parametr development_id przekazujemy bezpośrednio w skrypcie.

Tu jest fajny railcast o jquery:
http://railscasts.com/episodes/174-pagination-with-ajax
i tu:
http://railscasts.com/episodes/136-jquery