2008-11-07 30 views
17

Tôi muốn gọi một cách rõ ràng chế độ xem từ bộ điều khiển của mình.Làm cách nào để khai báo rõ ràng chế độ xem từ bộ điều khiển Rails?

Ngay bây giờ tôi có:

def some_action 
    .. do something ... 
    respond_to do |format| 
    format.xml 
    end 
end 

... sau đó nó gọi xem some_action.xml.builder tôi. Làm cách nào tôi có thể gọi một số chế độ xem khác? Có một tham số trong respond_to tôi đang thiếu?

Cảm ơn,

JP

Trả lời

37

Bạn có thể làm một cái gì đó như sau sử dụng render:

respond_to do |format| 
    format.html { render :template => "weblog/show" } 
end 
14

Xem Rendering section of the ActionController::Base documentation cho những cách khác nhau mà bạn có thể kiểm soát những gì để render.

Bạn có thể nói Rails để render một cái nhìn cụ thể (mẫu) như thế này:

# Renders the template located in [TEMPLATE_ROOT]/weblog/show.r(html|xml) (in Rails, app/views/weblog/show.erb) 
    render :template => "weblog/show" 

# Renders the template with a local variable 
    render :template => "weblog/show", :locals => {:customer => Customer.new} 
5

Bạn cũng có thể vượt qua: hành động, hoặc: điều khiển nếu điều đó thuận tiện hơn.

respond_to do |format| 
    format.html { render :action => 'show' } 
end 
5

Hoặc thậm chí đơn giản hơn kể từ Rails > 3.0:

render "edit" 
2

Bạn có thể thay đổi nội lookup_context của bộ điều khiển bằng cách làm này trong điều khiển của bạn

before_filter do 
    lookup_context.prefixes << 'view_prefix' 
end 

và bộ điều khiển sẽ cố gắng tải view/view_prefix/show.html khi trả lời yêu cầu show sau khi tìm kiếm tất cả các tiền tố xem khác trong danh sách. Danh sách mặc định thường là application và tên của bộ điều khiển hiện tại.

class MagicController 
    before_filter do 
    lookup_context.prefixes << 'secondary' 
    end 

    def show 
    # ... 
    end 
end 

app.get '/magic/1` 

yêu cầu GET này sẽ tìm kiếm một cái nhìn theo thứ tự sau:

  • view/application/show.erb
  • view/magic/show.erb
  • view/secondary/show.erb

và sử dụng đầu tiên tìm thấy xem.

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