从 Rails Helper 返回多个标签的最佳方法是啥?
Posted
技术标签:
【中文标题】从 Rails Helper 返回多个标签的最佳方法是啥?【英文标题】:What is the best way to return multiple tags from a Rails Helper?从 Rails Helper 返回多个标签的最佳方法是什么? 【发布时间】:2010-09-11 20:23:33 【问题描述】:我想创建一个隐藏字段并在一个助手中创建一个链接,然后将两者都输出到我的 erb。
<%= my_cool_helper "something", form %>
应该把结果放出来
link_to "something", a_path
form.hidden_field "something".tableize, :value => "something"
助手的定义是什么样的? link_to 和 form.hidden_field 的细节并不重要。重要的是,我如何从两个不同的调用返回输出。
【问题讨论】:
记住since Rails 3你需要将字符串标记为html_safe
以避免XSS攻击。
【参考方案1】:
有几种方法可以做到这一点。
请记住,现有的 Rails 助手,如 link_to
等,只是输出字符串。您可以将字符串连接在一起并返回(如果事情很简单,这是我大部分时间所做的)。
EG:
link_to( "something", something_path ) + #NOTE THE PLUS FOR STRING CONCAT
form.hidden_field('something'.tableize, :value=>'something')
如果您正在做更复杂的事情,您可以将该代码放在一个部分中,并让您的助手调用render :partial
。
如果你做的事情甚至比这更复杂,那么你可能想看看 errtheblog 的 block_to_partial 助手,这很酷
【讨论】:
不错且简单的答案!加上 FTW!【参考方案2】:到目前为止,我想出的最好的是:
def my_cool_helper(name, form)
out = capture link_to name, a_path
out << capture form.hidden_field name.tableize, value => 'something'
end
有没有更好的办法?
【讨论】:
你的回答对我帮助很大。谢谢!【参考方案3】:使用safe_join
。
我通常更喜欢与+
连接,如Orion Edwards's Answer 所示,但这是我最近发现的另一个选项。
safe_join( [
link_to( "something", something_path ),
form.hidden_field( "something".tableize, value: "something" )
] )
它具有显式列出所有元素以及这些元素的连接的优点。
我发现对于长元素,+
符号可能会在行尾丢失。此外,如果您要连接多个元素,我发现将它们列在这样的数组中对下一位读者来说更明显。
【讨论】:
【参考方案4】:如果你想缓冲除字符串之外的其他输出,那么你可以使用concat
而不是+
。
看到这个 - http://thepugautomatic.com/2013/06/helpers/
【讨论】:
【参考方案5】:def output_siblings
div1 = tag.div 'some content'
div2 = tag.div 'other content'
div1 + div2
end
这里只是简化了一些其他的答案。
【讨论】:
【参考方案6】:这对我有用。
def format_paragraphs(text)
text.split(/\r?\n/).sum do |paragraph|
tag.p(paragraph)
end
end
【讨论】:
以上是关于从 Rails Helper 返回多个标签的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
将 html5 数据属性与 rails content_tag helper 一起使用的最佳方法?
在 Rails 数据库中存储和稍后访问 JSON 对象的最佳实践
如何测试作为 helper_method 公开的 Rails 控制器方法?