Istnieją 2 scenariusze zazwyczaj mają Dzwoniąc akcję z widoku w Rails3:
- Korzystanie ze zwykłej wersji
link_to
wraz z jej odmianami.
- Korzystanie
link_to
z opcjonalnym argumentem :remote => true
(domyślnie false
)
W pierwsze jeden wyniki w normalnym cyklu żądanie/odpowiedź:
- połączeń akcja w kontrolerze.
- Jeśli nie wykonano żadnych specjalnych czynności (
render
lub redirect
), po prostu wyrenderuj widok związany z akcją. Więc jeśli akcja nazywa się do_db_stuff
, Rails3 próbuje renderować do_db_stuff.html.erg
(lub do_db_stuff.html.haml`) w odpowiednim katalogu widoków.
- można to zmienić poprzez wywołanie wyraźnie
render
lub redirect
pod koniec swojego działania:
render
: Renders szablon nazwa, używając aktualnego stanu kontrolera.
- : Przekieruj do nowej akcji (tego lub innego kontrolera) i użyj odpowiedniego szablonu do wyświetlenia.
Jest to np. używane podczas wywoływania w akcji create
niektóre zapisać metodę, która nie powiedzie, to powrót do tej samej strony, wywołując render :action => "new" # doen't execute the method
sekund jeden po prostu wywołuje działanie i zwraca wynik do strony. Obowiązkiem strony jest to, co zrobić z tym. W nieco innym scenariuszu mam np. w mojej aplikacji coś, co wygląda tak:
- Po lewej stronie widoku znajduje się lista zadań.
- Do każdego elementu zadania jest zarejestrowany program obsługi kliknięcia, który wywołuje
search_task
(za pomocą JavaScript z AJAX) na kontrolerze.
- Sterownik odpowiada na to połączenie, wysyłając wynik połączenia zwrotnego
render :partial ...
.
Funkcja JavaScript w przewodnika zarejestrował funkcję sukces, który wygląda tak:
element.bind('click', function() {
$('#left').children().removeClass('selected')
element.addClass('selected');
$.ajax({url: '/tasks/search_task/' + task_id,
async: false,
dataType: 'html',
success: function(data) {
target.html(data);
}});
}
(nie dołączone cały click-funkcji tutaj)
- więc wynik (gdy sukces wysłana) będzie powoduje, że treść
target
zostanie zastąpiona wysłanym kodem HTML.
Nie wiem, czy coś podobnego jest możliwe z link_to
, być może jest opcja.
Tak, :remote => true
powinien zadziałać, jeśli chcesz tylko zignorować wynik.
': remote => true' powinno działać. Napisz więcej kodu. – Petr
Zapisz tutaj swój kod. – megas
No cóż, próbowałem użyć {} wokół: action i: id, a teraz działa! – Derek