タイトルをつける
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