2010-08-14 41 views
8

Tôi viết một phương pháp helper Rails mà sẽ thêm wrapper html để khối nội dung bắt và thay thế phương pháp content_for, chẳng hạn nhưLàm thế nào để viết một helper trong Ruby on Rails để nắm bắt khối Haml?

- content_for :header do 
//haml code 

..would trở thành

- content :header do 
//haml code 

Để làm được điều này tôi sử dụng khối Haml và Ruby. Đây là hình thức trông giống như

def content(name,&block) 
content_for name do 
    capture_haml do 
    haml_tag "div",{:id=>name.to_s} do 
     haml_tag "div",{:id=>"#{name.to_s}_group"} do 
     block 
     end 
    end  
    end  
end 
end 

Nhưng tôi không thể làm việc này được. Không có thông báo lỗi. Nó chỉ không hiển thị các khối ở tất cả! Tôi không chắc mình đang làm gì sai. Tôi đánh giá cao ý kiến ​​thứ hai.

Trả lời

10

Bạn đang làm điều đúng đắn, nhưng bạn thực sự không gọi đến khối #content được chuyển. Để làm như vậy, hãy sử dụng block.call hoặc câu lệnh yield được tích hợp sẵn của Ruby.

0

chỉ cần thay đổi này

haml_tag "div",{:id=>"#{name.to_s}_group"} do 
    yield 
end 

để

haml_tag "div",{:id=>"#{name.to_s}_group"},&block 
+0

Hai là thực sự chính xác tương đương trong hành vi. (Phiên bản '& block' có thể có hiệu suất cao hơn một chút, nhưng những ngày này giống nhau.) Khi @ nex3 chỉ ra, OP không gọi' yield', nhưng chỉ đơn giản trả về 'block' mà không gọi nó. – Peeja

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