Rails видят помощников в вспомогательном файле
Вероятно, мне не хватает чего-то очевидного, но вот что я пытаюсь сделать.
В представлении я вызываю пользовательскую вспомогательную функцию
<div>
<%=display_services%>
</div>
В вспомогательном файле с функцией display_services
def display_services
html = "<div>"
form_for @user do |f|
f.text_field ...
end
html << "</div>"
end
Я нахожу, что form_for method и f.text_field выводят непосредственно в поток HTML без оболочки div, которая мне нравится. Каков правильный синтаксис для вывода всего HTML в display_services? Заранее благодарим за помощь.
Ответы
Ответ 1
Просто предложение для стиля, мне нравится делать что-то вроде этого:
На ваш взгляд:
<% display_services %>
Обратите внимание, что =
больше не нужен.
Затем хелпер использует concat()
, чтобы добавить что-то на свою страницу, а также свойство put-long-strings-together тоже устарело:
def display_services
concat("<div>")
form_for @user do |f|
f.text_field ...
end
concat("</div>")
end
Не нужно привязывать тэг <div>
к помощнику. Если вам нужен помощник для вложения чего-то в блок, вы также можете использовать магию урожая:
def block_helper
concat("<div>")
yield
concat("</div>")
end
И используйте его, как это, на ваш взгляд, - конечно же, с помощниками:
<% block_helper do %>
cool block<br/>
<% display_services %>
<% end %>
Ответ 2
IMHO, вы не должны иметь HTML-код в коде Ruby. Вместо этого предпочитайте частичные представления.
module ServicesHelper
def display_services(user)
render :partial => "shared/display_services", :locals => {:user => user}
end
end
Ответ 3
Как оказалось, мне пришлось сделать что-то вроде этого
def display_services
html = "<div>"
html << (form_for @user do |f|
f.text_field ...
end)
html << "</div>"
end
Обратите внимание на(), обернутую вокруг блока формы. Если у кого-то есть лучшее решение, дайте мне знать.