Ruby on rails 带扶手的把手/胡须

Ruby on rails 带扶手的把手/胡须,ruby-on-rails,handlebars.js,Ruby On Rails,Handlebars.js,我试图使用一个名为{{id}}的路由作为参数之一,允许手柄使用呈现的内容url\u for正在转义参数,因此生成的url包含%7B%7Bid%7D%7D。我尝试向调用中添加:escape=>false,但没有效果 routes.rb 汉密尔顿指数 application.js 输出 {{投票} 为了便于阅读,我简化了这个例子,但问题仍然是一样的;有没有任何方法可以使用带有{{}}的命名路由作为参数?我知道我可以做链接到'up','/rants/{{{id}}/vots/up',所以请不要提供

我试图使用一个名为
{{id}}
的路由作为参数之一,允许手柄使用呈现的内容
url\u for
正在转义参数,因此生成的url包含
%7B%7Bid%7D%7D
。我尝试向调用中添加
:escape=>false
,但没有效果

routes.rb 汉密尔顿指数 application.js 输出

{{投票}

为了便于阅读,我简化了这个例子,但问题仍然是一样的;有没有任何方法可以使用带有
{{}}
的命名路由作为参数?我知道我可以做
链接到'up','/rants/{{{id}}/vots/up'
,所以请不要提供这一答案。

问题是胡须字符在URL中无效,正在转义。我建议创建一个包装器

def handlebar_path(helper, arguments={})
  send("#{helper}_path", arguments).gsub(/%7B%7B(.+)%7D%7D/) do
    "{{#{$1}}}"
  end
end

handlebar_path :rant_vote, :rant_id => '{{id}}', :vote => 'up'

我只是覆盖了的
url\u来处理一个自定义参数:

module TemplateHelper

  def url_for(*args)
    options = args.extract_options!
    return super unless options.present?

    handle = options.delete(:handlebars)
    url = super(*(args.push(options)))
    handle ? url.gsub(/%7B%7B(.+)%7D%7D/){|m| "{{#{$1}}}"} : url
  end

end

所以现在,调用
named_url(:id=>'{{id}}',:handlebar=>true)
就像您所期望的那样工作。

是的,我试图避免创建单独的方法。目前,我允许
url_For()
处理一个额外的特殊参数:
:handlebar=>true
;最好使用修饰的方法,例如覆盖上述答案的url_。你提供了莫基补丁。
var vote_template =  Handlebars.compile($('#vote_template').html());
<script id="vote_template" type="text/x-handlebars-template">
  <div class='votes'>
    <a href="/rants/%7B%7Bid%7D%7D/votes/up">up</a>
    <span>{{votes}}</span>
    <a href="/rants/%7B%7Bid%7D%7D/votes/down">down</a>
  </div>
</script>
def handlebar_path(helper, arguments={})
  send("#{helper}_path", arguments).gsub(/%7B%7B(.+)%7D%7D/) do
    "{{#{$1}}}"
  end
end

handlebar_path :rant_vote, :rant_id => '{{id}}', :vote => 'up'
module TemplateHelper

  def url_for(*args)
    options = args.extract_options!
    return super unless options.present?

    handle = options.delete(:handlebars)
    url = super(*(args.push(options)))
    handle ? url.gsub(/%7B%7B(.+)%7D%7D/){|m| "{{#{$1}}}"} : url
  end

end