3

次の問題があります: rhtml (<% %> および <%= %> タグ内のルビと一緒に切り刻まれた HTML) をデータベースに保存して、レンダリングしたいのです。情報は、クエリを介して取得されます。データベースから取得した情報を、.erb ファイル内の通常のコンテンツであるかのように評価できる必要があります。私が現在持っているもの:

<% @mymods.each do |mod| %>
<%=  render_text(mod["html"])%>
<% end %>

mod["html"] は rhtml コードを含む変数であり、@mymods はクエリからのオブジェクトの配列です。現在、どの関数を使用すればよいかわかりません (もちろん、render_text は機能しません)。

助けていただければ幸いです。

/TZer0

4

1 に答える 1

11

ERBオブジェクトを使用して、テキストをファイルに含めずにテキストをレンダリングできます。タグ
付きのテキストを渡すだけです。<%= %>次のようなものをapplication_helper関数として配置できます。

def render_erb_text(text, args={})
   b = binding
   template = ERB.new(text, 0, "%<>")
   template.result(b)
end

そして、あなたのテンプレートで

<%=  render_erb_text("<%= %w(hi how are you).join(' - ') %>")%>

また、ビューの評価中よりもレンダリングエラーをより適切に処理できるため、コントローラーでテキストをレンダリングすることを検討することもできます。

変数バインディングなどの詳細については、ERBのドキュメントを参照してください。

これが内部でどのように機能するかについての詳細はよくわかりませんが、悪意のあるデータベースデータまたは悪意のあるデータベースデータでこのコードを実行すると、重大なリスクが発生する可能性があります。ユーザー入力または未審査のソースからのrubyコードの評価は、あるとしても、非常に慎重に行う必要があります。

于 2010-05-07T02:44:30.080 に答える