9. 新規作成機能

それでは、新規作成機能の修正を行います。

現状scaffoldで作成された機能では、http://localhost:3000/rostersPOST送信を行うと、RosterServer/app/controllers/rosters_controller.rbファイルのcreateメソッドが呼ばれるようになっています。

a. コントローラの修正

それでは、編集作業を行います。RosterServer/app/controllers/rosters_controller.rbファイルを開いてください。

2行目から以下を追加してください。

 

02 |    

03 |       skip_before_filter :verify_authenticity_token, :only => [:create,

       :update, :destroy]

04 |      

 

image074.jpg


 

上記の変更の説明をします。skip_before_filterメソッドに:verify_authenticity_tokenを指定すると、:onlyで指定したアクションに対する、Railsのビュー以外からのPOSTリクエストを受け付けるようになります。

これを指定しないと、Railsのビュー以外からのPOSTリクエストを行うとエラーになってしまいます。

つぎに、45行目のcreateメソッドを、以下のように変更してください。

 

45 |  def create

46 |    respond_to do |format|

47 |      format.html do

48 |        @roster = Roster.new(params[:roster])

49 |        if @roster.save

50 |          redirect_to @roster, :notice => 'Roster was successfully created.'

51 |        else

52 |          render :action => "new"

53 |        end

54 |      end

55 |      format.json do

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

57 |        @roster = Roster.new(json["roster"])

58 |        if @roster.save

59 |          render :json => "OK"

60 |        else

61 |          render :json => “NG”

62 |        end

63 |      end

64 |    end

65 |#    @roster = Roster.new(params[:roster])

66 |#

67 |#    respond_to do |format|

68 |#      if @roster.save

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

       created.' }

70 |#        format.json { render :json => @roster, :status => :created, :location =>

       @roster }

71 |#      else

72 |#        format.html { render :action => "new" }

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

       :unprocessable_entity }

74 |#      end

75 |#    end

 

image076.jpg


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

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

48行目で、画面のフォームから送られた値をもとに、Rosterオブジェクトを生成してインスタンス変数@rosterに代入しています。

49行目で、@rosterの値をDBに保存しています。保存の結果でif文を使用しています。

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

 

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

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

57行目では、解析したJSONファイルの内容をもとに、Rosterオブジェクトを生成してインスタンス変数@rosterに代入しています。

58行目で、@rosterの値をDBに保存しています。保存の結果でif文使用しています。

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

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

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

 

これで新規作成機能のサーバ連携機能ができました。

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

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