ActiveScaffoldを調べる
activescaffoldプラグインの動作を追った。
app/views/appname/list.rhtml
render :partial => "list"
/vendor/plugins/active_scaffold/default/frontends/views/_list.rhmlt
render :partial => "list_record"
/vendor/plugins/active_scaffold/default/frontends/views/_list_record.rhmlt
column_value = get_column_value(record, column)
render_list_column(column_value, column, record)
この時すでにcolumn_valueはhtmlコードでなく、置換されたものとなっていた。
get_column_valueは
vendor/plugings/active_scaffold/lib/helpers/list_column_helpers.rb
で定義されている。
get_column_value(record, column) の引数のrecordはまだhtmlから置換されていない状態。
get_column_value関数がhtml置換をしている模様。ちなみにrailsにはh関数があって、それがhtmlからタグ置換を行う。
clean_column_value関数はh関数を呼び出しているだけ。
ということで、
def clean_column_value(v)
h(v)
end
を
def clean_column_value(v)
if v=~ /img src/
v
else
h(v)
end
end
と変更した。
imgタグはエスケープされなくなった。