1

render-partial に変換したい一連の文字列があります。

例えば。私は @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 に答える