libro
www.tuyano.com
初心者のためのRuby on Rails3入門

Scaffoldで高速開発! (4/4)

作成:2012-10-14 15:32
更新:2012-10-14 15:32

■各アクションのポイントをチェック!

では、Scaffoldで自動生成された機能はどのような形で処理を実装しているのでしょうか。それぞれのアクションごとにポイントを整理しておきましょう。

・index レコードのリスト表示
メインページでは、レコードの内容が一覧表示されています。これはindexアクションとして処理が実装されています。以下のような感じです。
    @members = Member.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @members }
    end

@members = Member.allで全レコードを取得し@membersというインスタンス変数に代入しています。その後にある「respond_to」というのは、フォーマットに応じて異なるテンプレートを使うための仕組みです。ここではHTMLフォーマットが指定されればindex.html.erbを、JSONフォーマットであればJSON形式でレンダリングした内容をそれぞれ送るようにしています。

・new/create レコードの作成
newでは、新規作成のフォームに表示をするだけです。@member = Member.newでインスタンスを作成し、indexで行なったようにrespond_toでHTMLやJSONフォーマットに対応させています。

実際にレコードを保存するcreateでは、@member = Member.new(params[:member])で送信されたフォームの内容をもとにインスタンスを作成し、saveを行います。このsaveが正しく行われたかどうかで、respond_toのフォーマットの表示を変えています。(saveが正しく行われるかどうかというのは、バリデーションという検証処理によってチェックされます。このへんは改めて説明する予定です)

・edit/update レコードの更新処理
editでは、@member = Member.find(params[:id])で送られたIDパラメータの値を使ってレコードを検索し、@memberに設定しています。ビュー側では、このインスタンスをもとに値が各フィールドに設定されるのですね。

POST送信されると、@member = Member.find(params[:id])でインスタンスを取得し、@member.update_attributes(params[:member])という文でレコード内容のアップデートを行います。この「update_attributes」というメソッドは、引数に指定されたハッシュの内容をもとにレコード内容を更新する働きがあります。respond_toは、既にお馴染みの処理ですね。

・destroy レコードの削除
これもupdateなどと似たような処理ですね。@member = Member.find(params[:id])でパラメータの値を元にレコードを検索し、@member.destroyで削除します。


――よく見ると、基本的にはallfindsavedestroyといったごく基本的なメソッドの組み合わせによって処理が作成されていることがわかるでしょう。Scaffoldで作成されるのは、このようにごく基本的なメソッドによる簡単な処理だけなのです。

シンプルな処理ですが、基本的な機能は一応実装されていますから、これをもとに自分なりに内容をカスタマイズするのは比較的容易です。「ScaffoldCRUDの基本を作り、これをベースにカスタマイズしていく」というアプローチは、基本的なWebアプリ作成の一番の早道じゃないでしょうか。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※indexメソッド

  def index
    @members = Member.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @members }
    end
  end


※new/createメソッド

  def new
    @member = Member.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @member }
    end
  end

  def create
    @member = Member.new(params[:member])

    respond_to do |format|
      if @member.save
        format.html { redirect_to @member, notice: 'Member was successfully created.' }
        format.json { render json: @member, status: :created, location: @member }
      else
        format.html { render action: "new" }
        format.json { render json: @member.errors, status: :unprocessable_entity }
      end
    end
  end

※edit/updateメソッド

  def edit
    @member = Member.find(params[:id])
  end

  def update
    @member = Member.find(params[:id])

    respond_to do |format|
      if @member.update_attributes(params[:member])
        format.html { redirect_to @member, notice: 'Member was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @member.errors, status: :unprocessable_entity }
      end
    end
  end


※destroyメソッド

  def destroy
    @member = Member.find(params[:id])
    @member.destroy

    respond_to do |format|
      format.html { redirect_to members_url }
      format.json { head :no_content }
    end
  end
※関連コンテンツ

「初心者のためのRuby on Rails3入門」に戻る