2010-03-15 32 views
11

Hầu hết thời gian tôi không muốn hiển thị bố cục khi yêu cầu đến từ AJAX. Để kết thúc này tôi đã viết render :layout => !request.xhr? thường xuyên trong các hành động điều khiển của tôi.Không bao giờ hiển thị bố cục theo xhrs

Làm cách nào để tạo điều này là mặc định? Ví dụ, tôi muốn để có thể viết

def new 
    Post.find(params[:id]) 
end 

và có các chức năng được

def show 
    Post.find(params[:id]) 
    render :layout => !request.xhr? 
end 

(tôi tốt bằng tay xác định một cách bố trí trong các trường hợp hiếm hoi trong đó tôi muốn sử dụng một .)

+0

Không chỉ có các cuộc gọi AJAX sử dụng các URL khác nhau? –

Trả lời

11

Làm thế nào về điều này?

class UsersController < ApplicationController 
    layout proc {|controller| controller.request.xhr? ? false: "application" } 
end 
+1

và hoạt động trong Rails 3! – gertas

1

Một after_filter bình thường sẽ không hoạt động vì chúng tôi muốn sửa đổi hiển thị.

Làm thế nào về hiển thị cướp?

class ApplicationController < ActionController::Base 

    private 
    def render(options = nil, extra_options = {}, &block) 
    options = {:layout => !request.xhr?}.merge(options) unless options.nil? 
    super(options, extra_options)  
    end 
end 

Đặt bố cục khi gọi kết xuất để ghi đè lên. Một chút xấu xí nhưng nên làm việc.

+0

Điều này sẽ không hoạt động - nó chỉ gọi 'render' ngay lập tức (trước khi bộ điều khiển của tôi có cơ hội thiết lập môi trường cho chế độ xem của tôi) –

+0

Tất nhiên, bộ lọc sẽ không hoạt động ở đây ... xấu của tôi! Liệu các giải pháp cập nhật làm các trick? – anshul

4

Để làm cho nó mặc định để bao giờ làm cho một bố trí cho bất kỳ yêu cầu XHR, bạn có thể làm điều này:

class ApplicationController < ActionController::Base 
    layout proc { false if request.xhr? } 
end 

Khi yêu cầu là một yêu cầu XHR, nó ám chỉ rằng yêu cầu xem mà không có bố cục. Nếu không, nó sử dụng hành vi bố trí mặc định, tìm kiếm bố cục bằng cách thừa kế.

này khác với nói controller.request.xhr? ? false : 'application', vì đó sẽ luôn làm cho bố trí application cho một yêu cầu phi XHR, mà hiệu quả vô hiệu hóa các tra cứu bằng cách thừa kế.

Đồng thời xem số ActionView documentation cho đối số nil và kế thừa bố cục.

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