2012-04-15 28 views
8

Tôi đã định nghĩa trong tôi Users_controller:đúng render nhiều bố trí cho mỗi bộ điều khiển trong Rails

layout "intro", only: [:new, :create]

Đây là những gì bố trí của tôi trông giống như: Intro.html.haml

!!! 5 
%html{lang:"en"} 
%head 
    %title Intro 
    = stylesheet_link_tag "application", :media => "all" 
    = javascript_include_tag "application" 
    = csrf_meta_tags 
%body{style:"margin: 0"} 
    %header 
    = yield 
    %footer= debug(params) 

Khi tôi hiển thị một trang gọi số intro làm bố cục, nó được lồng vào bên trongcủa tôitệp không tốt.

Có cách nào để tránh việc lồng bố cục không mong muốn này không?

Cảm ơn trước!

Trả lời

41

Sự cố nằm trong Bộ điều khiển của tôi. Tôi đã khai báo nhiều bản sao bố cục như vậy:

class UsersController < ApplicationController 
    layout "intro", only: [:new, :create] 
    layout "full_page", only: [:show] 
    ... 
end 

Đừng làm điều này! Tuyên bố thứ hai sẽ được ưu tiên và bạn sẽ không nhận được ảnh hưởng mong muốn của mình.

Thay vào đó, nếu bố trí của bạn chỉ đơn giản là hành động cụ thể, chỉ cần khai báo nó trong hành động như thế này:

def show 
... 
render layout: "full_page" 
end 

Hoặc, nếu đó là một chút phức tạp hơn, bạn có thể sử dụng một biểu tượng để trì hoãn quá trình xử lý để một phương pháp trong thời gian chạy như sau:

class UsersController < ApplicationController 
    layout :determine_layout 
    ... 

    private 
    def determine_layout 
     @current_user.admin? ? "admin" : "normal" 
    end 
end 
+0

Cảm ơn! Lưu mặt tôi! –

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