【问题标题】:Rendering HAML from Rails Helper Inside a Loop/Iteration在循环/迭代中从 Rails 助手渲染 HAML
【发布时间】:2012-03-08 18:42:48
【问题描述】:

我在 rails 的帮助器中有以下代码:

def custom_options_tag(opts={})
  ['am', 'pm'].each do |meridian|
    ["12", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11"].each do |time|
      if @event.send(opts[:method], opts[:arg]) == time.to_s + meridian
        engine = Haml::Engine.new("%option{:value => human_time, :selected => 'selected'}= human_time")
      else
        engine = Haml::Engine.new("%option{:value => human_time}= human_time")
      end
      engine.render(Object.new, :human_time => time.to_s + meridian)
    end
  end
end

我的问题是... 如何在我的视图中呈现此代码? 似乎没有办法渲染在辅助方法中经过循环的haml代码。

为了简化我尝试将段落渲染 3 次...

def some_paragraph_helper
  3.times do
    engine = Haml::Engine.new("%p Some paragraph from helper")
    engine.render
  end
end

当我调用方法时...

some_paragraph_helper

...它输出的不是文本,而是不带段落标签的数字“3”。请注意,它只显示数字“3”一次……就好像它没有通过循环一样。

感谢您的帮助。

唱片

【问题讨论】:

    标签: ruby-on-rails ruby haml helper


    【解决方案1】:

    你需要返回engine.render的结果

    def some_paragraph_helper
      result = ""
      3.times do
        engine = Haml::Engine.new("%p Some paragraph from helper")
        result << engine.render
      end
      result
    end
    

    【讨论】:

    • 如果你不想转义返回raw(result)
    • 效果很好! Thx...为什么我需要显式返回结果值而不是转义它?如果我不使用循环,通常我不需要这样做。
    猜你喜欢
    • 2011-03-20
    • 2019-03-17
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多