1

我有一系列字符串,我想将其转换为渲染部分。

例如。我有一个@post.content,其中包含

Lopem ipsum dolor sic amet *form_34e141443439d1000000* Lorem dolorem *form_f97391de6275724201000000*

我要处理的。

我试过

content.gsub(/\*form_(.*?)\*/, render(partial: 'forms/render_form', object: CustomForm.where(_id: '\1').first, as: 'form_item'))

但这并没有做任何正确的事情,只会导致“#<#:0xb53a2810> 的未定义局部变量或方法`form_item'”错误。

但如果我尝试

content.gsub(/\*form_(.*?)\*/, render(partial: 'forms/render_form', object: '\1', as: 'form_item'))

并尝试 <%= form_item %> 部分,它返回给我一个正确的值 - f97391de6275724201000000

如果我尝试

content.gsub(/\*form_(.*?)\*/, render(partial: 'forms/render_form', object: CustomForm.where(_id: 'f97391de6275724201000000').first, as: 'form_item'))

它就像我想要的那样工作 - 给我一个要处理的表单模型。

问题:

我如何将 \1 值从 /*form_(.*?)*/ regexp 扔到 CustomForm.where(_id: '\1').first ?

4

1 回答 1

3

gsub您可以使用模式匹配可用作$1变量的方法的块形式:

content.gsub(/\*form_(.*?)\*/) do |match|
  render(partial: 'forms/render_form', 
         object: CustomForm.where(_id: $1).first, as: 'form_item'))
end
于 2013-10-22T08:59:20.500 回答