erubyをERBに置き替える その3
前回の「erubyをERBに置き替える その2」では、行頭が%の行がRubyスクリプト片として認識されないと書きましたが、ERBオブジェクトをnewするときにtrim_modeを’%’にしてやれば認識されるようになります。
まず、「ruby.cgi」ファイルで、ERB.new()の第3引数に’%’を渡します。
#!/usr/local/bin/ruby
require 'erb'
require 'cgi'
puts 'Content-Type: text/html; charset=utf-8'
puts
ERB.new(IO.read(CGI.new.path_translated), nil, '%').run
「fruits.rhtml」のHTML中のRubyスクリプトを行頭%に変更してみます。
<%
itemList = []
File.foreach("list.db") do |line|
line.chomp!
itemList.push(line)
end
%><html>
<body>
% itemList.each do |item|
<p><%=item%></p>
% end
</body>
</html>
ここで読み込んでいる「list.db」の中身は前回と同じです。
りんご
みかん
バナナ
ブラウザで「fruits.rhtml」にアクセスすると、下記のようなHTMLが戻ってくるので、うまく動作していることがわかります。
<html>
<body>
<p>りんご</p>
<p>みかん</p>
<p>バナナ</p>
</body>
</html>
ERBのtrim_modeは’%’の他にもいくつかあって、たとえば’>’を指定すると%>の直後の改行は出力されなくなるので、前回書いた下記の「fruits.rhtml」でも、
<%
itemList = []
File.foreach("list.db") do |line|
line.chomp!
itemList.push(line)
end
%><html>
<body>
<% itemList.each do |item| %>
<p><%=item%></p>
<% end %>
</body>
</html>
生成されるHTMLにはこのように余分な空行が出力されなくなります。
<html>
<body>
<p>りんご</p>
<p>みかん</p>
<p>バナナ</p>
</body>
</html>
他にどんなtrim_modeがあるかは、ERBのマニュアルを参照してください。
※バージョンメモ
- FreeBSD 10.0-RELEASE-p1 amd64
- ruby-1.9.3.484_2,1
- apache24-2.4.9_1