11.編集機能

編集機能の修正を行います。

現状scaffoldで作成された機能では、http://localhost:3000/rosters/{ID}/editGETアクセスを行うと、RosterServer/app/controllers/rosters_controller.rbファイルのeditメソッドが、http://localhost:3000/rosters/{ID}PUT送信をするとupdateメソッドが呼ばれます。このアクションが編集機能になります。

 a.    コントローラの修正

それでは編集を行います。RosterServer/app/controllers/rosters_controller.rbを開いてください。今回、Rhodes側からは、editアクションは呼ばないので、editメソッドの編集は行いません。

80行目のupdateメソッドを以下のように変更してください。

 

80 |  def update

81 |    @roster = Roster.find(params[:id])

82 |

83 |    respond_to do |format|

84 |      format.html do

85 |        if @roster.update_attributes(params[:roster])

86 |          redirect_to @roster, :notice => 'Roster was successfully updated.'

87 |        else

88 |          render :action => "edit"

89 |        end

90 |      end

91 |      format.json do

92 |        json = JSON.parse(params["json"])

93 |        if @roster.update_attributes(json["roster"])

94 |          render :json => "OK"

95 |        else

96 |          render :json => "NG"

97 |        end

98 |      end

99 |    end

100 |#    respond_to do |format|

101 |#      if @roster.update_attributes(params[:roster])

102 |#        format.html { redirect_to @roster, :notice => 'Roster was

        successfully updated.' }

103 |#        format.json { head :ok }

104 |#      else

105 |#        format.html { render :action => "edit" }

106 |#        format.json { render :json => @roster.errors, :status =>

          :unprocessable_entity }

107 |#      end

108 |#    end

109 |  end

 

image080.jpg

上記の処理の説明をします。

81行目では送られてきた:idパラメータに一致するIDRosterテーブルのレコードを取得して、インスタンス変数@rosterに代入しています。

83行目では、respond_toメソッドを使用して、アクセスの拡張子に合わせて処理を切り分けています。84行目〜91行目は、HTML形式へのアクセスがあった場合の処理になります。

 

85行目で、画面のフォームから送られた値をもとに、@rosterの値をDBに保存しています。保存の結果でif文を使用しています。

保存が成功している場合、86行目に移動し、redirect_toメソッドでリダイレクトさせています。保存に失敗している場合、88行目で編集画面を再度表示させるため、renderメソッドで画面を表示させています。

 

91行目〜98行目では、JSON形式へのアクセスがあった場合の処理になります。Rhodesからはこちらの処理を通るようになります。

92行目で、P.125編集機能で作成した機能からPUT送信するJSONファイルをJSON.parseメソッドを使用し、解析して変数jsonに代入しています。

93行目で、画面のフォームから送られた値をもとに、@rosterの値をDBに保存しています。保存の結果でif文を使用しています。

保存が成功している場合、94行目に移動し、保存に成功したことを返すため、renderメソッドに:jsonを指定して、JSON形式で”OK”を返しています。

保存に失敗している場合、96行目では保存に失敗したことを返すため、renderメソッドに:jsonを指定して、JSON形式で”NG”を返しています。

100行目から、108行目は自動生成されたコードをコメントアウトしています。

 

これで変更機能のサーバ連携機能ができました。

 
システム工房エムのサイトへのリンク

住所〒690-0017 島根県松江市西津田3-2-3 TEL.0852-23-8590 FAX.0852-23-8591
Copyright 2008-2010 System Maker M,All right reserved