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タグはエスケープされなくなった。