2012-07-02 11 views
12

Szukałem i nie byłem w stanie znaleźć rozwiązania dla tego typu mechaniki. Chcę ładować wszystkie strony normalnie w Railsach, ale gdy tylko wykonuję prośbę ajaxową, po prostu chcę zwrócić stronę bez układu. Tak więc za każdym razem, gdy robię zapytanie ajaxowe, mogę dołączyć ?page=true lub coś podobnego do tego, a Railsy po prostu zwracają stronę bez układu.Szyny uniemożliwiają układ podczas żądania AJAX

Czy to możliwe? Czy jest lepszy sposób na zrobienie tego, czego mi brakuje?

Dzięki za pomoc!

Ostateczne rozwiązanie Kodeks pracy:

W regulatorze wszystko co musisz zrobić, to dołączyć trochę logiki do format.html w bloku respond_to.

W metodzie show np

def show 
    # code beforehand 

    respond_to do |format| 
     format.html { render :layout => !request.xhr? } 
     # other formats 
    end 
end 

I to jest to! Zapobiegaj układom podczas żądań AJAX!

Uwaga: Dzięki komentarzowi smathy na temat jego odpowiedzi zostało to jeszcze bardziej uproszczone. Pierwotnie miałem format.html { render :layout => nil if request.xhr? } To rozwiązanie działa równie dobrze, ale modyfikacja smathy jeszcze bardziej upraszcza.

+0

Czy można to samo zrobić w kontrolerze aplikacji dla każdego żądania ajax? –

+0

możliwy duplikat [Nigdy nie renderuj układu w odpowiedzi na xhrs] (http://stackoverflow.com/questions/2444866/never-render-a-layout-in-response-to-xhrs) – fivedigit

Odpowiedz

8

Nie trzeba dodawać tego parametru, request.xhr? zwróci true w kontrolerze, gdy jest to żądanie Ajax. Wystarczy użyć tego, aby zdecydować, czy wyrenderować układ, czy nie.

+0

Jak by to działało? Próbowałem 'if request.xhr? render: layout => zero end' w kontrolerze show. Zwraca błąd. Albo nie używam request.xhr? poprawnie lub próbuję usunąć niepoprawnie układ. – KayoticSully

+1

Udało mi się to rozgryźć, DZIĘKUJĘ za informację. Będę edytować pytanie z moim faktycznym końcowym roboczym kodem. Dzięki waszym informacjom moje rozwiązanie jest bardzo "Rails Like" i jestem z niego bardzo zadowolony! – KayoticSully

+3

Ładne rozwiązanie, tak. Alternatywą jest użycie samego boolean - ale zanegowane. Na przykład. Zrobiłbym: 'render: layout =>! Request.xhr?' – smathy

Powiązane problemy