2012-07-02 38 views
12

Tôi đã tìm kiếm xung quanh và không thể tìm được giải pháp cho loại máy móc này. Tôi muốn tải tất cả các trang bình thường trong Rails, nhưng bất cứ khi nào tôi làm một yêu cầu ajax tôi chỉ muốn trả lại trang mà không có bố trí. Vì vậy, bất cứ lúc nào tôi thực hiện một requst ajax tôi có thể thêm một ?page=true hoặc một cái gì đó dọc theo những dòng và có Rails chỉ trả lại trang mà không cần bố trí.Rails ngăn bố cục trong khi yêu cầu AJAX

Điều này có khả thi không? Có cách nào tốt hơn để làm điều đó mà tôi đang thiếu?

Cảm ơn bạn đã trợ giúp!

chung kết Giải pháp Mã làm việc:

Trong bộ điều khiển tất cả các bạn cần làm là thêm một chút logic để các format.html trong khối respond_to.

Trong phương pháp show ví dụ

def show 
    # code beforehand 

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

Và đó là nó! Ngăn chặn bố cục trong các yêu cầu AJAX!

Lưu ý: Nhờ nhận xét của smathy về câu trả lời của ông, điều này đã được đơn giản hóa hơn nữa. Tôi ban đầu có format.html { render :layout => nil if request.xhr? } Giải pháp này hoạt động tốt, nhưng sửa đổi của smathy giữ nó thậm chí còn đơn giản hơn.

+0

Có thể thực hiện tương tự trong bộ điều khiển ứng dụng cho mọi yêu cầu ajax không? –

+0

bản sao có thể có của [Không bao giờ hiển thị bố cục để phản hồi lại xhr] (http://stackoverflow.com/questions/2444866/never-render-a-layout-in-response-to-xhrs) – fivedigit

Trả lời

8

Bạn không cần phải thêm tham số đó, request.xhr? sẽ trả về true trong bộ điều khiển của bạn khi đó là yêu cầu Ajax. Chỉ cần sử dụng điều đó để quyết định có nên hiển thị bố cục hay không.

+0

Cách thức hoạt động? Tôi đã thử 'if request.xhr? render: layout => nil end' trong bộ điều khiển show. Nó đang trả về một lỗi. Hoặc tôi không sử dụng request.xhr? chính xác hoặc tôi đang cố xóa bố cục không chính xác. – KayoticSully

+1

Tôi đã có thể tìm ra, THANK bạn cho thông tin. Tôi sẽ chỉnh sửa câu hỏi bằng mã làm việc cuối cùng của mình. Nhờ thông tin của bạn, giải pháp của tôi rất "Rails Like" và tôi cực kỳ hài lòng với nó! – KayoticSully

+3

Giải pháp tốt, vâng. Một cách khác là sử dụng chính boolean - nhưng đã phủ nhận. Ví dụ. Tôi sẽ làm: 'render: layout =>! Request.xhr?' – smathy

Các vấn đề liên quan