LoginSignup
0
0

More than 1 year has passed since last update.

Ruby on Railsメモ

Last updated at Posted at 2023-01-29

ruby on railsの仕組み

  • URLをたたく
  • ruby on rails内のルーティング機能がルーティングテーブルを参照し、コントローラとアクションを取得する。
  • コントローラとアクションがコントローラ機能に渡され、コントローラ機能が、対応するHTMLファイルを検索する。
    • コントローラがモデルを経由してデータベースからデータを操作(取得・挿入・削除など)
  • ビュー機能がブラウザにHTMLファイルを返す。

image.png

フォルダ構成例

  • app
    • assets:資産
      • config:
      • stylesheets:スタイルシート可能場所
        • home_scss
    • controllers:コントローラ格納場所
      • home_controller.rb
    • views:HTMLファイル格納場所
      • home
        • top.html.erb
      • layouts:共通のHTMLを書いておく場所(例:トップページのリンクなど)
        • application.html.erb
    • models
      • テーブルを操作するためのモデルと呼ばれる特殊なクラスのファイル
      • 例:空白の入力をNGとする。
  • bin
  • config
    • routes.rb:ルーター
  • public:共通
    • top.jpg
  • db
    • 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
  • テーブル操作

    • コントロールファイルでの操作
      • 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:変数名
    • マイグレーションファイルでの操作
      • add_column テーブル名, カラム名, データ型
        • カラム追加
        • 例:add_column :users, :image_name, :string
      • remove_column テーブル名, カラム名, データ型
        • カラム削除
        • 例:remove_column :users, :image_name, :string
  • 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:特殊変数。セッション情報を保持するときに使う

routingテーブル

  • get
    • データベースを変更しないときに使う
  • post
    • データベースを変更する場合に使う
    • データベースは変更しないがセッション(session)の値を変更する場合に使う

テーブルの連携

  • テーブル作成時
    • migrationファイル作成時に結合キーにforeign_key: trueを指定する。
      • 例:t.references :agency, foreign_key: true
  • テーブル作成後
    • app/models配下でhas_many、belongs_toでテーブル間の連結を指定する。
      • 親側のファイルにbelongs_toを指定する。
      • 子側のファイルにhas_manyを指定する。

その他

  • <%= 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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0