今日からチュートリアルを開始
プロジェクトの作成
$ rails new project_name
サーバーの起動
$ rails server
これで localhost:3000
でアクセス可能
Controllerの生成
$ rails generate controller home top
=> rails g controllerに変換可能
Laravelの php artisan make:controller
的な感じではなく、自動で views/home/tophtml.erb
と、 app/controllers/home_controller.rb
とルーティングの config/routes.rb
が生成され、ルーティングに自動で追加される。便利だなこれ。
ただ、既存のControllerが存在する場合、 rails generate controller home test
はエラーになる。
ルーティング
config/route.rb
に記述
Rails.application.routes.draw do
get "top" => "home#top"
get "about" => "home#about"
end
画像挿入
public配下に画像ファイルを配置し、呼び出し元で /image_name.png
などを入力すれば反映される。
「erb」とは「Embedded Ruby(埋め込みRuby)」のこと
viewでの表示
<%= url %>
PHPの <?= $url ?>
と同じイメージ
ループ処理
<% posts.each do |post| %>
<% end %>
Controller側でViewに変数を渡す
class UrlController < ApplicationController
def index
@urls = [
"https://google.com",
"http://google.com",
]
end
end
@
で変数定義するけど、勝手に同じ名前のViewにファイルへ変数が渡るのがもやもやするな。
とりあえず書き方は Python
に似ている。
DBのマイグレーションファイル作成
$ rails g model モデル名 column_name1:type column_name2:type
自動でモデル名の複数形の名前のというテーブルが生成される
マイグレーション実行
$ rails db:migrate
Laravelと同じイメージで使えるのは嬉しい
マイグレーション実行と同時に、Modelのファイルが生成される。Posts
Rails consoleというものがある
$ rails console // 起動
Rails consoleからテーブルへデータをinsertする
$ rails console
[1] pry(main)> url1 = Url.new(url: "https://google.com")
[1] pry(main)> url1.save // transactionをsaveする
テーブルの一番最初のレコードを取得する
a = Table.firstでインスタンスを取得する
a.url で中身を確認できる
これをサービスモデルで取得して、Controllerからサービスモデルを呼び出させるようにするのがいいかな?
どのページでも表示したいHTMLはapplication.html.erbに書いておく
<%= yield %>
に値するとこに、views配下に入っているファイルが生成される。Laravelだ。
link_toでanchorをリプレイス
link_to("文言", "設定したルーティングパス") => <a href="設定したルーティングパス">文言</a>
rails consoleでモデル経由でデータ確認
find_by(id:1)
とかで検索かける
ちなみに、割とrails consoleはよく使われるらしい。
ルーティングでパラメータ設定
Rails.application.routes.draw do
get "tests/:id" => "tests#show"
end
これで /tests/1
とかで、アクセスできるようになるけども、本来予期した普通のルーティングより下に書かないとノイズになって変にハマる。
文字列内の変数展開
"/posts/#{post.id}"
@
はつけない。
フォーム生成
form_tag("パス") do
リダイレクト
redirect_to("パス")