BNBのプログラミング勉強記録

ガチのプログラミング初心者が駆け上がっていくブログ

メモ(Rails I)

フォルダとか作成

  • ターミナルにて「tweet_app」フォルダとその中に多くのフォルダとファイルが作成される
rails new tweet_app

サーバー起動

rails server

トップページ自動生成

  • このコマンドを実行すると、新しいWebページが自動で作られ、「localhost:3000/home/top」というURLにアクセスできる
  • viewsフォルダの中に「homeフォルダ」と「top.html.erb」というファイルが作成される
  • 場所はapp/views/home/top.html.erb
rails generate controller home top

コントローラ

  • rails generate controller home top」を実行したとき、「home_controller.rb」というコントローラのファイルが作成され、ファイルの中に「topメソッド」が追加される
  • コントローラ内のメソッドを「アクション」と呼ぶ。アクションは、コントローラと同じ名前のビューフォルダから、アクションと同じ名前のHTMLファイルを探してブラウザに返す
class HomeController < ApplicationController
  def top
  end
end

ルーティング

  • Rails内ではコントローラを経由してビューを返しているが、ブラウザとコントローラを繋ぐ役割を担うのがルーティング
  • ページが表示されるまでに、ルーティング→コントローラ→ビューという順で処理が行われている
  • ルーティングは、送信されたURLに対して「どのコントローラの、どのアクション」で処理するかを決める「対応表」
  • ブラウザでURLを入力すると、ルーティングがURLを見て、適切なコントローラのアクションを呼び出す
  • ルーティングは「config/routes.rb」に定義され、「get "URL" => "コントローラー名#アクション名"」という文法で書かれる。これによって、ブラウザから「localhost:3000/home/top」というURLが送信されたときに、homeコントローラーのtopアクションで処理される
Rails.application.routes.draw do
  get "home/top" => "home#top"
end

ちなみに、下記のようにすると「localhost:3000/top」でトップページになる

Rails.application.routes.draw do
  get "top" => "home#top"
end

ルーティングとアクションの追加

  • rails generate controller コントローラ名 アクション名」を実行することで、コントローラと、それに対応したファイルが自動で用意される
  • しかし、同じ名前のコントローラがすでにある場合は、このコマンドを使うことはできない
  • すでに作られているルーティングとコントローラのファイルにコードを書き足すことで、ルーティングとアクションを追加できる
class HomeController < ApplicationController
  def top
  end
  
  def about
  end

end
Rails.application.routes.draw do
  get "top" => "home#top"
  get "about"=>"home#about"

end

CSS

  • CSSファイルは「app/assets/stylesheets」フォルダに入っている
  • rails generate controller home ...」コマンドを実行したときに、CSSファイル(home.scss)も自動生成される
  • 「scss」はCSSを拡張したもので、CSSを効率的に書く文法も使用できる
  • Railsでは、「stylesheets」フォルダの中に保存されているCSSファイルにコードを書けば、すべてのビューにCSSが適用される
  • なんでや。自動でやってくれるのか?

画像

  • 画像は、「public」フォルダに配置しておくと、「img src="/画像名" 」や「background-image: url("/画像名");」のように、画像名を指定するだけで、簡単に画像を表示することができる
  • 不思議ですねえ

localhost:xxxx」でトップページにアクセスできるようルーティング書き換え

Rails.application.routes.draw do
  get "/" => "home#top"
  get "about" => "home#about"
end