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

Bob*_*Bob 17 ruby-on-rails

我可能错过了一些明显的东西,但这就是我想要做的事情.

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

<div>
  <%=display_services%>
</div>
Run Code Online (Sandbox Code Playgroud)

在带有display_services函数的帮助文件中

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

我发现form_for方法和f.text_field直接输出到HTML流而没有我喜欢的div包装器.在display_services中输出所有HTML的正确语法是什么?在此先感谢您的帮助.

小智 30

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

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


xij*_*ijo 22

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

在你看来:

<% display_services %>
Run Code Online (Sandbox Code Playgroud)

请注意,=不再需要.然后帮助程序使用concat()向页面附加内容,并且put-long-strings-together的内容也已过时:

def display_services
  concat("<div>")
  form_for @user do |f|
    f.text_field ...
  end
  concat("</div>")
end
Run Code Online (Sandbox Code Playgroud)

<div>标签放入帮助器是否是必要的.如果您需要帮助程序将某些内容嵌入块中,您也可以使用一些yield-magic:

def block_helper
  concat("<div>")
  yield
  concat("</div>")
end
Run Code Online (Sandbox Code Playgroud)

并在你的视图中使用它 - 当然也有助手:

<% block_helper do %>
  cool block<br/>
  <% display_services %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

  • 另外请注意,如果您希望HTML看起来很漂亮,并且"\n"到concat的末尾. (2认同)

Bob*_*Bob 5

事实证明,我必须做这样的事情

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

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