Love PG , Liquor & Music

プログラマー備忘録やお酒や音楽

Heroku+Ruby on Railsで開発する! その5(Scaffolding使ってサクッとAP作る)

近くにRailsの相談出来る人がいなくて、はじめてStackoverflowで聞いてみたのですが、回答が英語でほぼわからず、しまいにはマイナス評価を付けられてボコられてきました。何事も経験です。

http://stackoverflow.com/questions/24058706/i-cant-save-model-rails4

 

さて、前回までで開発環境がひと通り整いました。

今回からは実際に開発をしていきます。

 

1番最初の記事でテストの管理AP作るとか言ってましたが、

いろいろ考えまして、今別で作っている為替取引の結果を参照できるようなアプリを作って行こうと路線変更をします。

 

まずは、本当に最小構成で以下のような感じのを作っていきます。

 

要件:アプリを利用するユーザーを管理できること

機能:アプリを使うユーザーの登録・更新・削除・参照

構成:ユーザー情報は名前とログインで使うパスワードを持っている

 

です。これをWEB上で行えるようにします。

 

プロジェクトを作る

まず、プロジェクトを作ります。前回テストで作成した感じでrails generateコマンドを使って作ります。make-moneyというプロジェクトを作りました。

64bitOS使ってる人はこの後にHeroku+Ruby on Railsで開発する! その3(開発環境構築 Ruby, Rails, Gitのインストール) - Love PG , Liquor & Musicで書いた対応が必要になります。(いちいちめんどくさいから早く対応して欲しい。GITHUBに上がってる開発Versionでは対応されている雰囲気がありました。)

 

f:id:gwaan_so:20140608194711j:plain

 

Scaffoldを使っていろいろつくる

次にRailsの強力な機能Scaffoldを使っていろいろ作ります。

Scaffoldとは、足場という意味でコマンド一つでMVCを全てばーっと全部作ってくれます。

今回作るのは、ユーザー情報なので以下のようなコマンドを叩いてあげます。

rails g scaffold user name:string password:string

# パラメータ設定はrailsコマンド(rails) - Railsドキュメントにいろいろ書いてます。

 

すると以下のファイルが生成されます。

f:id:gwaan_so:20140608195818j:plain

 

ここでいったん

rake db:migrate して rails gしてアプリを起動させて

http://localhost:3000/users

にアクセスしてみます。するとこんなページができてました。

 

f:id:gwaan_so:20140608200044j:plain

 

New Userのリンクをクリックすると、こんな画面になりユーザの登録が出来ます。

 

f:id:gwaan_so:20140608200131j:plain

 

登録したら一覧に表示されます。

ここで登録したレコードの右側にあるShow、Edit、Destroyをクリックするだけでその動作を行えるようになっています。

 

f:id:gwaan_so:20140608200241j:plain

 

Jsonにも対応していて、URLの後ろに.jsonをつけてあげるとJSON形式で返してくれます。

 

f:id:gwaan_so:20140608200420j:plain

 

こんな一瞬でWEBアプリが完成しました。便利ですね。

 

では、自動生成されたものを少し読み解いていきます。

 

コントローラー

コントローラーではusers_controller.rbが生成されています。まずひとつ気づくのはパラメータでuserと指定したのにusersになっています。これはグローバルなリソースを意識する場合複数形にする、自分のリソースを意識する場合は単数形にするという考え方から来ています。英語の複数形とか単数形を今までの開発であまり意識したことがなかったのでなれるまでがこれも大変です。。。他にもModeの場合は他動詞を意識したりとかいろいろあります。

 

users_controller.rb 

 

ソースを見ると、index,show,new,edit,create,update,destroyが自動生成されているのがわかります。(# new,editは使わないので割愛します。)

index

Userに含まれる全ての値を返しています。ちなみにRubyは処理終わりにreturnしないでも 処理最後の値が勝手にReturnされます。あと、先頭に@が付いているのはグローバル変数でこれに値を詰めてやってViewとのやりとりを行ってます。

 

show

まず、before_actionがshowにかかってるのでset_userが呼ばれます。で、この中でidが一致するユーザーを返しています。ここのIDはモデル作るときに定義していませんが、必ずプライマリーキーとして自動生成される値になります。

 

create,update

パラメータからUserを作ってあげてます。パラメータはuser_paramsで作ってあげてます。72行目のparams.require(:user).permitはrails4からの機能でモデルに対してアクセス可能な要素の許可を行ってあげています。

あと、respond_toで遷移先をしていしています。

遷移先はsave処理の成功・失敗により分けられています。また、ここでformatをJSONにするかHTMLにするかの振り分けを行っています。

 

destroy

ユーザーの削除を行ってます。

 

モデル

モデルは特に自動生成されません。モデルは自分で実装するところです。

空のファイルと、DBのmigrationファイルのみ自動生成されます。

 

 ビュー

JSONとHTMLで出力があるため以下の2通り自動生成されます。コントローラーで設定されたグロバル変数を参照して値を出力できるようにRubyで書かれています。

デザインを変えたい場合はここにスタイル当てて行ったりしていきます。 

 

show.html.erb

 

show.json.jbuilder

 

 ルート

最後にルートを見ると

  resources :users

がデフォで設定されています。処理ごとにきちんと制御するべきですがまあ作っていく工程でも一番最後の方で問題はないです。

 

他にもテストクラスなども自動生成されていますので、これはテストをする際にあたっていきたいと思います。