2010-11-07 27 views
5

Câu hỏi ngắn gọn là: làm thế nào có thể một trang conLàm thế nào để "content_for: title" của Ruby on Rails có thể được gán sau?

<% content_for :title do 'Showing product' end %> 

thiết lập :title cho việc bố trí chính?


chi tiết:

Chúng ta có thể sử dụng trong cách bố trí ứng dụng application.html.erb

<title><%= content_for :title %> 
    ... 
    <%= yield %> 

và tôi nghĩ yield trả về nội dung cho trang phụ, chẳng hạn như từ show.html.erb, nơi mà nó chứa:

<% content_for :title do 'Showing product' end %> 

Làm cách nào để có thể :title bằng cách nào đó được sử dụng bởi một cái gì đó ở trên yield? Tôi nghĩ rằng phần title được đánh giá trước tiên, và sau đó là yield, vậy làm cách nào để :title đặt lại nội dung cho thẻ <title> một cách có hồi tưởng?

Trả lời

8

Câu trả lời ngắn: Bằng cách gian lận.

Câu trả lời dài: ActionView xác định lại sản lượng sao cho sản lượng không giống với sản lượng mà chúng tôi biết và yêu thích từ các sản phẩm tốt. Trong thực tế, tệp mẫu được hiển thị trước tệp bố cục và sau đó, lợi nhuận trong tệp bố cục sẽ được thay thế bằng mẫu đã được hiển thị. Các khối content_for được lưu vào các biến lớp và do đó bạn có thể truy cập chúng sau này từ bố cục của mình.

5

tôi xác định một phương pháp helper title trong tập tin application_helper.rb tôi như vậy:

module ApplicationHelper 
    def title(page_title) 
    content_for(:title){ page_title } 
    page_title 
    end 
end 

Sau đó ở phía trên cùng của nội dung file ERB của tôi, tôi có thể làm điều này

<% title "Rails Rocks" %> 
Other regular content 

Và trong application.html.erb

<html> 
<head> 
    <% title = yield(:title).chop! %> 
    <title><%= title || 'Default Title' %></title> 
</head> 
<body> 
    <h1 class="title"><%= title %></h1> 
</body> 
+0

Tại sao bạn đặt #chop! ở đó? – maikovich

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