2013-10-22 78 views
1

我有一系列的一些字符串,我想轉換爲渲染部分。Ruby on Rails .gsub正則表達式和渲染部分

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

Lopem存有悲SIC阿梅德 * form_34e141443439d1000000 * 的Lorem dolorem * form_f97391de6275724201000000 *

,我要處理。

我試圖

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

但是,這並不做任何事情是正確的,結果只在 「未定義的局部變量或方法`form_item」爲#<#:0xb53a2810>」 的錯誤。

但如果我嘗試

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')) 

它的工作方式就像我想要的那樣 - 爲我提供了一個表單模型來處理。

問題:

我怎麼扔從/*form_(.*?)*/正則表達式\ 1值CustomForm.where(_id: '\ 1')第一?

回答

3

可以使用gsub方法的塊形式,其中模式匹配可作爲$1變量:

content.gsub(/\*form_(.*?)\*/) do |match| 
    render(partial: 'forms/render_form', 
     object: CustomForm.where(_id: $1).first, as: 'form_item')) 
end 
+0

謝謝!那就是訣竅。 –