Ruby on rails 在ERB中使用mustachelambda函数
我正试图在Rails中通过服务器和客户端在线共享我的胡须模板 一切都很好,只是我不知道如何在服务器端定义lambda函数 假设我的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">
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
这有两个问题:
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