読者です 読者をやめる 読者になる 読者になる

RailsのTextHelper#textilizeがまともに動かない。

TextHelper#textilize は少なくとも手元の環境(Rails 1.2.6/RedCloth 3.0.4)ではまともに動かないっぽい。以下の手順で確認した。

$ ./script/console
>> a = ActionView::Base.new

# リストから脱出ができない。
>> a.textilize("abc\n* def\n\n\nghi")
=> "abc\n\t<ul>\n\t<li>def<br />\nghi</li>\n\t</ul>"

# \nをたくさん書いてもリストから脱出ができない。
>> a.textilize("abc\n* def\n\n\n\n\n\n\n\n\nghi")
=> "abc\n\t<ul>\n\t<li>def<br />\nghi</li>\n\t</ul>"

# 普通にRedClothを使うと最低1行空ければうまくいく。
>> RedCloth.new("abc\n* def\n\nghi").to_html
=> "abc\n\t<ul>\n\t<li>def</li>\n\t</ul>\n\n\n\t<p>ghi</p>"

# hard_breaksオプションを付けるとうまくいかなくなる。
>> RedCloth.new("abc\n* def\n\n\nghi", [:hard_breaks]).to_html
=> "abc\n\t<ul>\n\t<li>def<br />\nghi</li>\n\t</ul>"

RedClothの:hard_breaksオプションが問題なようだ。

trunkでも:hard_breaksオプションが付いてるので、最新のバージョンでもうまくいかないんじゃないだろうか……。

自前でhelperに足すのがいいみたい。

module ApplicationHelper  
  def textilize(text)
    RedCloth.new(text).to_html
  end
end