Ruby on rails 在ERB中使用mustachelambda函数

Ruby on rails 在ERB中使用mustachelambda函数,ruby-on-rails,mustache,Ruby On Rails,Mustache,我正试图在Rails中通过服务器和客户端在线共享我的胡须模板 一切都很好,只是我不知道如何在服务器端定义lambda函数 假设我的html.erb看起来像: <% if params['client_side'].nil? %> <%= render 'template', :mustache => @post %> <% else %> <script type="text/template" id="template">

我正试图在Rails中通过服务器和客户端在线共享我的胡须模板

一切都很好,只是我不知道如何在服务器端定义lambda函数

假设我的
html.erb
看起来像:

<% if params['client_side'].nil? %>
  <%= render 'template', :mustache => @post %>
<% else %>
  <script type="text/template" id="template">
    <%= render 'template' %>
  </script>    
<% end %>
现在查看以下模板:

<h1>{{title}}</h1>
<div>
  {{#marked}}{{content}}{{/marked}}
</div>
过程
ApplicationHelper
中定义为

def process(obj)
  {
    marked: lambda {|text| markdown(Mustache.render(text))}
  }
end
这有两个问题:

  • (Ruby)lambda函数中的
    text
    确实是
    '{{content}}'
    ,但是
    Mustache.render(text)
    无法处理它-它返回一个空字符串
  • 上面的代码现在只呈现
    标记的
    字段,我无法找到保留
    作者
    对象的其他(未处理的)属性的方法(例如
    标题
    obj.attributes
    似乎是一个很有希望的开始,但我不知道如何将标记的
    的已处理响应与其他
    属性相结合,即使上面的#1起作用

  • 这是我自己做的。
    ApplicationHelper
    中的
    process
    方法现在看起来像这样(使用新的lambda语法):

    现在,这将捕获任何模板中标记的
    的所有调用

    <% if params['client_side'].nil? %>
      <%= render 'template', :mustache => process(@post) %>
    <% else %>
    ...
    
    def process(obj)
      {
        marked: lambda {|text| markdown(Mustache.render(text))}
      }
    end
    
    def process(obj)
      obj['marked'] = ->(text) { markdown(Mustache.render(text, obj)) }
      obj.attributes
    end