at posts/single.html

タイトルをつける

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

…もう少し綺麗に書く方法がありそうだなぁ。 とにかく、これでタイトルが表示されるようになった。

screenshot (Ruby on Rails) - (3)

でも、よく見たら文字の切れ目で文字化けしている orz

関連する日記