2009-09-04 34 views
17

Tôi có thể thiếu một cái gì đó hiển nhiên ở đây nhưng đây là những gì tôi đang cố gắng để làm.Rails xem người trợ giúp trong tập tin trợ giúp

Từ quan điểm, tôi gọi một chức năng tùy chỉnh helper

<div> 
    <%=display_services%> 
</div> 

Trong tập tin helper với display_services hoạt

def display_services 
    html = "<div>" 
    form_for @user do |f| 
    f.text_field ... 
    end 
html << "</div>" 
end 

tôi thấy rằng phương pháp form_for và đầu ra f.text_field trực tiếp đến Luồng HTML không có trình bao bọc div mà tôi thích. Cú pháp thích hợp để xuất tất cả HTML trong display_services là gì? Cảm ơn trước sự giúp đỡ của bạn.

Trả lời

22

Chỉ cần một gợi ý cho phong cách, tôi thích làm một cái gì đó như thế này:

Theo quan điểm của bạn:

<% display_services %> 

Xin lưu ý rằng = là không cần thiết nữa. Các helper sau đó sử dụng concat() để nối thêm một cái gì đó vào trang của bạn và điều đặt-dài chuỗi-cùng là lạc hậu quá:

def display_services 
    concat("<div>") 
    form_for @user do |f| 
    f.text_field ... 
    end 
    concat("</div>") 
end 

Có nessaccary đưa thẻ <div> vào helper. Nếu bạn cần một helper cho nhúng một cái gì đó thành một khối, bạn có thể sử dụng một số lượng ma thuật cũng như:

def block_helper 
    concat("<div>") 
    yield 
    concat("</div>") 
end 

Và sử dụng nó như thế này theo quan điểm của bạn - tất nhiên với những người giúp đỡ quá:

<% block_helper do %> 
    cool block<br/> 
    <% display_services %> 
<% end %> 
+0

Ngọt ngào, tôi thích giải pháp của bạn tốt hơn, sạch hơn, cảm ơn. – Bob

+2

Một lưu ý khác, nếu bạn muốn HTML của bạn trông đẹp, và "\ n" vào cuối concat. – Bob

5

Khi nó quay ra, tôi đã phải làm một cái gì đó như thế này

def display_services 
    html = "<div>" 
    html << (form_for @user do |f| 
    f.text_field ... 
    end) 
    html << "</div>" 
end 

Lưu ý() quấn quanh khối mẫu. Nếu ai đó có giải pháp tốt hơn, hãy cho tôi biết.

30

IMHO, bạn không nên mã hóa HTML trong mã Ruby. Thay vào đó, hãy thích partials views.

module ServicesHelper 
    def display_services(user) 
    render :partial => "shared/display_services", :locals => {:user => user} 
    end 
end 
+0

Tôi đồng ý với cách tiếp cận này - có vẻ sạch hơn để tạo ít html trong trình trợ giúp của bạn nhất có thể. – cman77

+0

Mặc dù tôi đã bỏ phiếu cho câu trả lời này và tôi hết lòng đồng ý rằng số lượng HTML nhỏ nhất có thể sẽ được tạo ra trong trình trợ giúp của bạn (tôi sẽ nói 'KHÔNG CÓ HTML NÊN ĐƯỢC PHÁT HÀNH TRONG MỘT H HEL TRỢ!'), Tôi tự hỏi về lợi ích của mức độ gián tiếp bổ sung này chỉ với một dòng mã. Chắc chắn nó chỉ làm tăng thời gian thực hiện để hiểu và điều hướng các codebase vào một ngày sau đó, hoặc bởi một nhà phát triển khác nhau. (Mặc dù tất nhiên tôi có thể thấy rằng nó sẽ tiết kiệm tổ hợp phím trong thời gian ngắn nếu nó được sử dụng rất nhiều.) –

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