Rails 查看帮助程序文件中的帮助程序

问题描述 投票:0回答:4

我可能在这里遗漏了一些明显的东西,但这就是我想要做的。

从视图上看,我正在调用自定义辅助函数

<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 方法和 f.text_field 直接输出到 HTML 流,而不需要我喜欢的 div 包装器。输出 display_services 中所有 HTML 的正确语法是什么?预先感谢您的帮助。

ruby-on-rails
4个回答
32
投票

恕我直言,您不应该在 Ruby 代码中硬编码 HTML。相反,更喜欢部分视图

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

22
投票

只是对风格的建议,我喜欢做这样的事情:

您认为:

<% display_services %>

请注意,不再需要

=
。 然后,助手使用
concat()
将某些内容附加到您的页面,并且将长字符串放在一起的操作也已过时:

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

是否需要将

<div>
标签放入助手中。如果您需要帮助程序将某些内容嵌入到块中,您也可以使用一些yield-magic:

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

并在您看来像这样使用它 - 当然也与助手一起使用:

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

5
投票

事实证明,我不得不做这样的事情

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

注意表单块周围的 ()。如果有人有更好的解决方案,请告诉我。


0
投票

我喜欢上面@0livier给出的答案。对于那些想知道用例可能是什么的人来说,我发现当我需要递归渲染视图时它很有用

© www.soinside.com 2019 - 2024. All rights reserved.