2009-09-04 12 views
17

Prawdopodobnie brakuje mi czegoś oczywistego, ale oto, co próbuję zrobić.Widok widoków pomocników w pliku pomocniczym

Z widoku, dzwonię niestandardową funkcję pomocnika

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

W pliku pomocnika przy czym display_services funkcjonować

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

Uważam, że metoda form_for i wyjście bezpośrednio do f.text_field Strumień HTML bez opakowania div, które lubię. Jaka jest prawidłowa składnia wyjściowa całego HTML w display_services? Z góry dziękuje za twoją pomoc.

Odpowiedz

22

tylko sugestia dla stylu, lubię robić coś takiego:

W widoku:

<% display_services %> 

Należy pamiętać, że = nie jest potrzebne nic więcej. Pomocnik następnie wykorzystuje concat() dołączyć coś do swojej strony i rzecz putting-long-strings-razem jest zbyt przestarzały:

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

Czy nessaccary umieścić tag <div> do pomocnika. Jeśli potrzebujesz pomocnika do osadzania coś w bloku można użyć trochę plastyczności magii, a także:

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

i używać go w ten sposób Państwa zdaniem - oczywiście z pomocników też:

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

Słodko, lubię twoje rozwiązanie lepiej, jest czystsze, dzięki. – Bob

+2

Jeszcze jedna uwaga, jeśli chcesz, aby HTML wyglądał ładnie, a "\ n" na koniec konkat. – Bob

5

Jak się okazuje, musiałem zrobić coś takiego

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

Zanotować() owinięty wokół bloku formularza. Jeśli ktoś ma lepsze rozwiązanie, daj mi znać.

30

IMHO, nie powinieneś mieć kodu HTML zakodowanego na stałe w kodzie Ruby. Zamiast tego wolisz partials views.

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

Zgadzam się z tym podejściem - wydaje się czystsze, aby budować jak najmniej html w swoim pomocniku, jak to możliwe. – cman77

+0

Mimo że głosowałem na tę odpowiedź i całkowicie zgadzam się, że najmniejsza ilość kodu HTML powinna być wygenerowana w twoim pomocniku (chciałbym powiedzieć "NIE POWINIEN BYĆ WYKORZYSTANYM W POMOCY!"), Zastanawiam się o korzyściach z tego dodatkowego poziomu pośrednictwa dla tylko jednej linii kodu. Na pewno po prostu wydłuża czas potrzebny na zrozumienie kodu źródłowego i poruszanie się po nim w późniejszym terminie lub przez innego programistę. (Chociaż oczywiście widzę, że zaoszczędziłoby to klawiszy w krótkim czasie, gdyby było dużo używane). –

Powiązane problemy