ruby on railsの仕組み
- URLをたたく
- ruby on rails内のルーティング機能がルーティングテーブルを参照し、コントローラとアクションを取得する。
- コントローラとアクションがコントローラ機能に渡され、コントローラ機能が、対応するHTMLファイルを検索する。
- コントローラがモデルを経由してデータベースからデータを操作(取得・挿入・削除など)
- ビュー機能がブラウザにHTMLファイルを返す。
フォルダ構成例
- app
- assets:資産
- config:
- stylesheets:スタイルシート可能場所
- home_scss
- controllers:コントローラ格納場所
- home_controller.rb
- views:HTMLファイル格納場所
- home
- top.html.erb
- layouts:共通のHTMLを書いておく場所(例:トップページのリンクなど)
- application.html.erb
- home
- models
- テーブルを操作するためのモデルと呼ばれる特殊なクラスのファイル
- 例:空白の入力をNGとする。
- assets:資産
- bin
- config
- routes.rb:ルーター
- public:共通
- top.jpg
- db
- migrate:マイグレーション
- マイグレーションファイル:データベースへの変更内容が定義される
- migrate:マイグレーション
コマンド
基本
- rails new アプリ名:Railsアプリの作成
- rails server:サーバーの起動
- rails g(generate) controller aaaa bbb
- aaaaコントローラのbbbアクションを作成
- rails console:コンソールを起動。Rubyを手軽に実行できる。
DB
-
テーブルの作成
- rails g model xxxx yyyy:zzzz (yyyy:zzzz):テーブルの作成。カラムとデータ型は複数指定可
- xxxx:テーブル名、yyyy:カラム名、zzzz:データ型
- ファイルの作成をしてから反映するまでの間はブラウザのページがエラーになる
- rails db:migrate:データベースに変更を反映
- rails g migration xxxxx:マイグレーションファイルのみ作成
- 例: rails g migration add_image_name_to_user
- rails g model xxxx yyyy:zzzz (yyyy:zzzz):テーブルの作成。カラムとデータ型は複数指定可
-
テーブル操作
- コントロールファイルでの操作
- xxxx = yyyy.new(zzzz:aaaa) : レコードの追加
- 例:post = Post.new(content:"追加します")
- xxxx:変数名、yyyy:テーブル名、zzzz:カラム名、aaaa:追加内容
- xxxx = yyyy.find_by(zzzz:id) :idから特定のレコードを1件取得
- 例:post = Post.find_by(id: 2)
- xxxx:変数名、zzzz:id名
- xxxx = yyyy.where(zzzz:id) :idから特定のレコードを全て取得
- 例:post = Post.where(id: 2)
- xxxx:変数名、zzzz:id名
- xxxx.destroy:レコードの削除、find_byなどで取得したあとに行える
- xxxx:変数名
- xxxx = yyyy.new(zzzz:aaaa) : レコードの追加
- マイグレーションファイルでの操作
- add_column テーブル名, カラム名, データ型
- カラム追加
- 例:add_column :users, :image_name, :string
- remove_column テーブル名, カラム名, データ型
- カラム削除
- 例:remove_column :users, :image_name, :string
- add_column テーブル名, カラム名, データ型
- コントロールファイルでの操作
-
rails g model:モデルを作成する。
- モデル:データベースとのやりとりを行う。
-
xxxx.save:DBの内容の更新を保存
-
xxxx.first:DBの1レコード取り出す
-
xxxx.all:DBのすべてのレコードを取り出す
-
xxxx.yyyy:xxxx.firstなどで取得した列の値を出力する
- xxxx:インスタンス名、yyyy:列名
変数定義
- コントローラ機能で変数定義するのが一般的。HTMLでも変数定義は可能。
- コントローラ: @xxx = xxxx
- HTML: <% xxxx = xxxx %>
- 通常の変数
- 変数定義: xxx = yyy
- price = 100
- session:特殊変数。セッション情報を保持するときに使う
- 変数定義: xxx = yyy
routingテーブル
- get
- データベースを変更しないときに使う
- post
- データベースを変更する場合に使う
- データベースは変更しないがセッション(session)の値を変更する場合に使う
テーブルの連携
- テーブル作成時
- migrationファイル作成時に結合キーにforeign_key: trueを指定する。
- 例:
t.references :agency, foreign_key: true
- 例:
- migrationファイル作成時に結合キーにforeign_key: trueを指定する。
- テーブル作成後
- app/models配下でhas_many、belongs_toでテーブル間の連結を指定する。
- 親側のファイルにbelongs_toを指定する。
- 子側のファイルにhas_manyを指定する。
- app/models配下でhas_many、belongs_toでテーブル間の連結を指定する。
その他
- <%= link_to "テキスト", "リンク先のパス", {method: xxx} %>:aタグを簡単に書いたもの
- ex. <%= link_to "Yahoo!", "https://www.yahoo.co.jp/" {method: "post"} %>
- xxxはgetやpostなどを指定する。デフォルトはget
- <%= form_tag("/xxx/xxx", {multipart: true}) do % >:フォームで入力したものを飛ばす先、画像を飛ばすなら、「{multipart: true}」を指定する。
<textarea name="content">
<input type="submit" value="投稿">
<% end %> - redirect_to("/xxxx/xxx"):パスを指定する。別ページにとぶ
- render("/xxx/xxx"):ビューファイルを指定する(パスでない)。renderを記述した処理の中の変数がビューでも使える。
- <% xxxxx.errors.full_messages.each do |message| %>:エラーメッセージの出力
- name属性:parameterに対してデータとしての名前をつけることができるHTML属性。これによって、ユーザーがリクエストをする際に、viewの方で入力されたparameterにnameのキーをつけることができる。name属性をつけるときは、保存したいデータベースのカラム名にすること。
- 各コントローラの全アクションで共通する処理がある場合には、before_actionを使うと便利。xxx,yyyは使用できるメソッドを指定。すべてのメソッドで利用するなら記述不要。
- 例 before_action :set_current_user, {only: [:xxx, :yyy]}
- def set_current_user xxxxxx end