【问题标题】: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攻击。

标签: ruby-on-rails ruby helper


【解决方案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
        

        【讨论】:

          猜你喜欢
          • 2010-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-29
          相关资源
          最近更新 更多