タイトルをつける
2006-10-03
RandomNote は、テキストの1行目がタイトルになっている。 そこで、さっきのビューにもタイトルを付けてみる。 タイトルをクリックするとそのページだけを表示する (show アクションを呼び出す) ようにした。 タイトルが長いと大変なことになるので、 truncate メソッドを使って 20 文字に切り取ることにした。
<% for page in @pages %>
<div style="border: solid 1px #999; padding: 0.5em; margin: 1em">
<h2 style="font-size: 110%; margin: 0.3em">
<%= link_to truncate(page.title, 20), :action => 'show', :id => page %>
</h2>
<div style="font-size: 80%; background-color: #fcc">
<%= link_to 'Edit', :action => 'edit', :id => page %>
<%= link_to 'Destroy', { :action => 'destroy', :id => page }, :confirm => 'Are you sure?', :post => true %>
</div>
<%=h page.body %>
</div>
<% end %>
実行すると、当然のように
undefined method `title' for #<Page:0x409a50d4>
というエラーが表示される。 page.title というメソッドを作った覚えは無いからね。 そこで、1行目の文字列を返す title メソッドをPage モデルに追加する。
$ vi app/models/page.rb
class Page < ActiveRecord::Base
def title
body.each {|title| return title.chomp }
end
end
…もう少し綺麗に書く方法がありそうだなぁ。 とにかく、これでタイトルが表示されるようになった。
でも、よく見たら文字の切れ目で文字化けしている orz