次に、in_place_editor_fieldで同一画面編集出来る様にする。

今のままじゃ登録しか出来ないので、編集出来るようにします。
ここからはAjaxぽく、マウスクリックでデータを書きかえれる様にします。
(削除は次の段階でやりますよ。)


6.javascriptのファイルを設定する。
Ajaxを利用するので、Ajax用のjavascriptファイルを読み込む様にします。
app/views/test/list.rhtmlに、<%= javascript_include_tag :defaults %>
と言う一行を追加します。(上から五行目)

<html>
  <head>
    <title>
      名簿管理アプリケーション
    </title>
    <%= javascript_include_tag :defaults %>
  </head>
  <body>
    <hr>
    <ul id="members">
      <% for @member in @members %>
      <li id="member_<%=@member.id %>" >
         名前 : <%= h @member.name  %> /
         どんな人 : <%= h @member.atitude %>
      </li>
      <% end %>
    </ul>

    <hr>
    <%= form_tag :action => 'add' , :id => @member %>
      <p>名前 <%= text_field 'member','name' %>どんな人 <%= text_field 'member','atitude' %><%= submit_tag '登録' %></p>
    <%= end_form_tag %>
  </body>
</html>


7.in_place_editor_fieldを登録する。
in_place_editor_fieldと言うrailsのヘルパーを使います。
クリックするとその場所を編集出来るajaxを提供してくれる優れ物です。
なんと1行で済むんですね……。

中盤の名前やどんな人の項目を、 hでの表示からin_place_editor_fieldに置き換えます。
保存するときのボタンの名前をsave_textで指定してます。
取り消しの際のリンクの名前はcancel_textで。

<html>
  <head>
    <title>
      名簿管理アプリケーション
    </title>
    <%= javascript_include_tag :defaults %>
  </head>
  <body>
    <hr>
    <ul id="members">
      <% for @member in @members %>

      <li id="member_<%=@member.id %>" >
         名前 : <%= in_place_editor_field :member, 'name'     , {}, { :save_text=>"保存", :cancel_text=>"取消" } %> /
         どんな人 :  <%= in_place_editor_field :member, 'atitude'     , {}, { :save_text=>"保存", :cancel_text=>"取消" } %>
      </li>

      <% end %>
    </ul>

    <hr>
    <%= form_tag :action => 'add' , :id => @member %>
      <p>名前 <%= text_field 'member','name' %>どんな人 <%= text_field 'member','atitude' %><%= submit_tag '登録' %></p>
    <%= end_form_tag %>
  </body>
</html>


8.Webサーバ側の受け皿を作る
今のままだとブラウザ上で編集出来る様に見えるのですが、実際にはDBに
登録するWeb側の受け皿がないので、コントローラーにそれを作ります。
やっぱりこちらもrailsの機能を使うと1項目あたり1行ですみます。
in_place_edit_for を記載します。

コントローラーこんな感じになります。
今回は2項目メンテ画面用意してるので、2行目、3行目を追加しています。

class TestController < ApplicationController
  in_place_edit_for :member, :name
  in_place_edit_for :member, :atitude

  def list
    @members = Member.find(:all)
  end

  def add
    @member = Member.new(params[:member])
    @member.save! unless @member.name.blank?

    redirect_to :action=>'list'
  end
end

これでクリックでの編集は完成です。