1 / 64

資料ダウンロード

資料ダウンロード. http://sasoonware.com/file/. 第5章モデルクラスについて. 目次. 5-1 . モデル利用のプロジェクトを作ろう 5-2. マイレグレーションとシード 5-3. アプリケーションの実行からデプロイまで 5-4. モデルの基本操作を覚えよう 5-5. 基本の検索を覚えよう. 5-1 . モデル利用のプロジェクトを作ろう 5-2. マイレグレーションとシード 5-3. アプリケーションの実行からデプロイまで 5-4. モデルの基本操作を覚えよう 5-5. 基本の検索を覚えよう. DB 設定.

Download Presentation

資料ダウンロード

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 資料ダウンロード • http://sasoonware.com/file/

  2. 第5章モデルクラスについて

  3. 目次 5-1.モデル利用のプロジェクトを作ろう 5-2.マイレグレーションとシード 5-3.アプリケーションの実行からデプロイまで 5-4.モデルの基本操作を覚えよう 5-5.基本の検索を覚えよう

  4. 5-1.モデル利用のプロジェクトを作ろう 5-2.マイレグレーションとシード 5-3.アプリケーションの実行からデプロイまで 5-4.モデルの基本操作を覚えよう 5-5.基本の検索を覚えよう

  5. DB設定 database.ymlにDB設定を記述 このファイル! 因みに、database.yml.sampleというファイルが生成されているので、それをコピって作る

  6. DB設定記述 • # SQLite version 3.x • # gem install sqlite3 • # • # Ensure the SQLite 3 gem is defined in your Gemfile • # gem 'sqlite3‘ • development: • adapter: sqlite3 • database: db/development.sqlite3 • pool: 5 • timeout: 5000 • # Warning: The database defined as "test" will be erased and • # re-generated from your development database when you run "rake". • # Do not set this db to the same as development or production. • test: • dapter: sqlite3 • database: db/test.sqlite3 • pool: 5 • timeout: 5000 • production: • adapter: sqlite3 • database: db/production.sqlite3 • pool: 5 • timeout: 5000 開発モードの設定 使用するDBの種類によって記述が違うので、その辺りはテキスト参照 テストモードの設定 リリースの際の設定

  7. 命名規則 ・モデルのファイル名 コントローラーファイルからコントローラーを抜いたもの 例: コントローラーが sample_contoroller.rb だったら sample.rb になります。 基本全て小文字。

  8. モデルのクラス名 クラス名は、ファイル名の最初の一文字が大文字になったもの 先程の例だと、 sample.rb ファイルのクラス名は Sample 基本的に全て単数系 Samplesとか、samples.rbとかは作らない

  9. 勝手に生成してくれる 実際に作ってみよう 1.コマンドで作る rails generate model sample name:stringage:integermails:stringtel:string モデル名の後に持ってる要素の変数名:型を書いていく

  10. 5-1.モデル利用のプロジェクトを作ろう 5-2.マイレグレーションとシード 5-3.アプリケーションの実行からデプロイまで 5-4.モデルの基本操作を覚えよう 5-5.基本の検索を覚えよう

  11. ここから大事 モデルを作成すると、3種類のファイルができる 1.スクリプトファイル sample.rbモデル本体 2.テスト関係のファイル testフォルダ内に入っているテスト用ファイル    ここでは気にしなくてよい 3.マイグレーションファイル   データベースの更新を行うためのファイル。   マイグレーションを行うために必要

  12. マイグレーションとは? 予めRailsにデータベースに関する記述を行うことで、Railsからデータベースのテーブルを自動生成する機能 通常の開発 1.データベースのテーブルを作成 2.データに合わせて処理を作成 Rails 1.必要なモデルを作成 2.モデルに対応したテーブルを自動生成 メリット 1.SQLを使わなくてよい 2.「やべ、必要なテーブルがねぇ!」が起こらない

  13. sample.rbが作成される sampleモデルを作ったら ○○_create_samples.rbが作成される(○○は作成年月日時分秒)

  14. migrate ファイルの中身 デフォルト状態 class CreateSamples < ActiveRecord::Migration defchange end end 記述後 ※コマンドプロンプトで作成した場合はデフォルトで記述済み class CreateSamples < ActiveRecord::Migration defchange create_table :sample do |t| t.string :name t.integer:age t.string :mail t.string :tel t.timestanmp end end ※ExoIDeの場合 書き方が少し違う

  15. 疑問点 tって何? 余り深く考えずにマイグレーションの文法みたいなものr(らしい) timestampsは? 恐らくcreated_atカラム、updated_atカラムの生成を行っている

  16. マイグレーションの実行 ここに移動 rake db:migrate を実行

  17. データベースを確認 データベースmyapp内 samplesテーブル

  18. シードファイル作成 シードとは? 予めテーブル内に入れておく値 このファイルに記述

  19. 記述例 sample.rb内 Sample.create( name: ”yoshimura”, age: 23, mail: “satoshi.yoshimura.so@gmail.com”, tel: “090-9999-9999”) モデルクラスの持つ、createメソッドを利用する為の記述

  20. シード作成 ここに移動 rake db:seed を実行

  21. 実行結果 sampleテーブル内 データが挿入されている

  22. どんな使い方をするのか? 都道府県や銀行コードのような予め値が決まっているカラムに便利! カテゴリなどをデータベース内に定義する場合や、 初期ユーザーは管理者として扱うことが決まっている場合などにも使える

  23. 5-1.モデル利用のプロジェクトを作ろう 5-2.マイレグレーションとシード 5-3.アプリケーションの実行からデプロイまで 5-4.モデルの基本操作を覚えよう 5-5.基本の検索を覚えよう

  24. コントローラーで全レコードを取り出す ※styleseetの問題なので<table>用のスタイルを追加しようは割愛 app/contorollers/ sample_contoroller.rb内 #config: utf-8 class SampleContoroller < ApplicationContoroller layout “mylayout” def index @title = “this is Index Page.” @datas = Sample.all end end

  25. 表示:全体のレイアウトの修正 このファイル!

  26. コントローラーからの値を用いた表示 body部分を修正 <body> <%= render “partial/myheader” %> <%= yield %> <%= render “partials/myfooter” %> </body> <%= yield %>内に、 アクションから呼び出されたテンプレートが作成するHTMLコンテンツが埋め込まれる。

  27. indexページに値を表示する このファイル!

  28. データベースからとってきた値表示 • <table> • <% @datas.each do |data| %> • <tr> • <td><%= data.name %></td> • <td><%= data.age%>></td> • <td><%= data.mail %>/<td> • <td><%= data.tel %></td> • </tr> • <% end %> • </table> <% @datas.eachdo |data| %> <% end %> 間の処理をdata分繰り返す ~

  29. パーシャルを利用 app/views/index.html.erbを編集 • <table> • <tr> • <th>ID</th> • <th>Name</th> • <th>Age</th> • <th>Mail</th> • <th>Tel</th> • </tr> • <%= render :partial => “partials/mydata”, :collection => datas %> • </tables> head部だけ表示して、データ部分はパーシャルで受け取る

  30. どのファイル? このファイル!

  31. パーシャルに記述 <tr> <td><%= mydata.id %></td> <td><%= mydata.name %></td> <td><%= mydata.age %></td> <td><%= mydata.mail %></td> <td><%= mydata.tel %></td> </tr> 中身を記述

  32. イメージ モデル Sample コントローラー ビュー データを渡す @datas = Sample.all データを取り出す レイアウト レイアウト データを取り出す (大きな見た目) パーシャル パーシャル パーシャル パーシャル (見た目の部品) DB

  33. 5-1.モデル利用のプロジェクトを作ろう 5-2.マイレグレーションとシード 5-3.アプリケーションの実行からデプロイまで 5-4.モデルの基本操作を覚えよう 5-5.基本の検索を覚えよう

  34. モデルの基本操作 1.allメソッド smp= sample.all サンプルテーブルの中身全部が変数smpの中に入る smp.name or smp[“name”] でnameカラムの値をとり出せる

  35. レコードの新規作成 Rails上で吉村智志という人物を作成するには? 1.クラスを作成 Yoshi = sample.new ( :name => “吉村智志” , :age 23 , :mail => “taro@yamada” , :tel => “090-6811-1291” ) さっき作ったモデルクラス これで値を持つクラスが作成される 2.データベースに保存 Yoshi.save

  36. フォームでレコードを作成する このファイル!

  37. 入力フォームはHTMLで普通に書く views/index.html.erbに書き加える <form> <input type=“text” name=“name” > ...省略 </form> (同じ入力フォームを何度も使う予定なら、パーシャルにしちゃった方が良い。) ////////////////////////////////////////////// !!POSTの値を受け取るときにはroutes.rbに post “sample/index” を追記 (結構忘れやすそう)

  38. DB保存までにコントローラーがやること Postした値を受け取る if request.post? then obj = Sample.new( :name => params[‘name’], :age => params[‘age’].to_i, :mail => params[‘mail’], :tel => params[‘tel’] ) obj.save ポストリクエストだった場合 受け取った値でモデルを生成 生成したモデルをDBに保存

  39. レコード操作の第1歩 IDでレコードを検索、表示 一覧から詳細へ 一覧画面 <tr> <td><%= mydata.id %></td> <td><%= mydata.name %></td> <td><%= mydata.age %></td> <td><%= mydata.mail %></td> <td><%= mydata.tel %></td> <a href=“/sample/show?id=<%=mydata.id %>”> </tr> 一覧画面へのリンク リンク先URL例myapp/sample/show?id=1

  40. クエリで送られたIDを基にレコードを検索 1.コントローラーを修正 一覧表示の為のアクションを記述 sample_controller.rb def show @result = Sample.find(params[:id]) end Sampleテーブルのidのレコードを取得 クエリ文字列で取り出した値をID番号として渡している

  41. 検索結果を表示するVIEWを用意 作成!

  42. 受取のview <%= @result.id %> <%= @result.name %> <%= @result.age %> <%= @result.mail %> <%= @result.tel %> <%= @result.created_at %> <%= @resullt.updated_at %> ※ アクションを生成したら ・アクション ・ビュー ・routes.rb の三つは同時に更新することが多い

  43. Railsでレコードの削除 モデルクラス.destoroy 例: @sample = Sample.find(1) @sample.destoroy でSampleテーブルでidが1のレコードを消去 条件指定消去 @sample.destoroy_all(created_at> '2013-08-24') で今日以後に作ったレコードすべて消去

  44. ここから先はさっきとほとんど一緒 一覧から消去へ 一覧画面 <tr> <td><%= mydata.id %></td> <td><%= mydata.name %></td> <td><%= mydata.age %></td> <td><%= mydata.mail %></td> <td><%= mydata.tel %></td> <a href=“/sample/show?id=<%=mydata.id %>”> <a href=“/sample/delete?id=<%=mydata.id %>”> </tr> デリートアクション用のページへ。クエリーでidを指定 js部分は省略

  45. デリート用のアクションを用意 コントローラー def delete obj = Sample.find(params[:id]) obj .destroy redirect_to :action => “index” end ※削除はコントローラでやってしまう。 本ではindexに戻していたが、 「削除されました」 を表示するビューを作っても良い ※routes.rb get “sample/delete” も忘れずに

  46. 次は更新 実はSaveメソッドは更新も兼ねている! 例:一覧→入力→更新を行うh 一覧画面index.html.erb <tr> <td><%= mydata.id %></td> <td><%= mydata.name %></td> <td><%= mydata.age %></td> <td><%= mydata.mail %></td> <td><%= mydata.tel %></td> <a href=“/sample/show?id=<%=mydata.id %>”> <td><a href=“/sample/update?id=<%= mydata.id %>”></td> </tr> 入力画面へのリンク

  47. 入力画面 作成!

  48. 入力用HTML <table> <form method=“post” action=“/sample/update”> <tr> <input type=“hidden”name=“id” value=“<%= @result.id %>”> <th>Name</th> <td><input type=“text” name=“age” value=“<%= @result.age %>”></td> </tr> 他Age等省略... <input type=“submit” value=“送信”> </form> </table> 本ではIDも書いてたけど、 IDの存在はなるべくユーザに見せない方が良い (連番なので、会員数とか見せたくない場合とか。その場合URLも変えなきゃだめだから、全部hiddenで送る?)

  49. コントローラーで値受け取って更新

  50. 更新アクションを追加 defupdate @result = Sample.find(params[:id]) if request.post? then @result.name = params[‘name’] @result.age = params[‘age’].to_i @result.mail = params[‘mail’] @result.tel = params[‘tel’] @result.save redirect_to :action => “index” else @title = “Update ID” + params[:id] end end ※同じようにindexではなく、更新完了ページに飛ばしても良い 忘れずにroutes.rbを更新 get “sample/update” post “sample/update”

More Related