2009-06-26 32 views

Trả lời

13

Bạn nên sử dụng CaptureHelper.

def my_div(some_options, &block) 
    # capture the value of the block a string 
    content = capture(&block) 
    # concat the value to the output 
    concat(content) 
end 

<% my_div([]) do %> 
    <p>The content</p> 
<% end %> 


def my_div(some_options, &block) 
    # capture the value of the block a string 
    # and returns it. You MUST use <%= in your view. 
    capture(&block) 
end 

<%= my_div([]) do %> 
    <p>The content</p> 
<% end %> 

Sử dụng chụp + concat nếu bạn cần ghép đầu ra. Sử dụng tính năng chụp nếu bạn cần chụp và sau đó sử dụng lại nội dung. Nếu khối của bạn không sử dụng rõ ràng <% =, thì bạn PHẢI gọi concat (cách ưa thích).

Đây là ví dụ về phương pháp ẩn nội dung nếu người dùng không phải là quản trị viên.

def if_admin(options = {}, &block) 
    if admin? 
    concat content_tag(:div, capture(&block), options) 
    end 
end 

<% if_admin(:style => "admin") do %> 
<p>Super secret content.</p> 
<% end %> 
2

http://www.rubycentral.com/book/tut_containers.html

Tuyên bố năng suất sẽ trả lại kết quả của khối thông qua. Vì vậy, nếu bạn muốn in (console?)

def my_div &block 
    yield 
end 

my_div { puts "Something" } 

Would đầu ra "cái gì đó"

Nhưng: ý tưởng của phương pháp của bạn là gì? Xuất một DIV?

+0

weppos có câu trả lời tốt hơn nhiều 8) –

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