目次
準備
create application
% rails new . --css=tailwind --css=sass --javascript=esbuild --database=postgresql
% bin/bundle add tailwindcss-rails
% bin/rails tailwindcss:install
gem 'devise', '~> 4.9', '>= 4.9.2'
% bundle install
% bin/setup
テスト用のデータで開発用のデータをつくる設定
# db/seeds.rb puts "\n== Seeding the database with fixtures ==" system("bin/rails db:fixtures:load")
user
% bin/rails generate devise:install
% bin/rails generate devise User Confirmableをコメントアウトする % bin/rails db:migrate
# app/models/user.rb :confirmable追記
Viewの追加
rails generate devise:views users
view更新
# config/initializers/devise.rb config.scoped_views = true
Devise
config.mailer_sender = 'info@pokpok.jp'
メールプレビュー(リンクがエラーになる)
# test/mailers/previews/devise_preview.rb class DevisePreview < ActionMailer::Preview def confirmation_instructions Devise::Mailer.confirmation_instructions(User.new, Devise.friendly_token[0,20]) end end http://localhost:3000/rails/mailers/devise/confirmation_instructions
home
ホームを作る
% rails generate controller Pages home
homeコントローラーはパブリックなので、認証をはずす
# ユーザーがコンテンツにアクセスするには認証が必要で、共通のワークスペースに属するコンテンツのみが表示される必要がある # ユーザーは、認証されていない場合でも、ホームページからサインイン フォームに移動できる必要がある # アプリケーション全体のどこでもユーザーが認証されていることを確認する必要がある。 # ApplicationControllerDevise authenticate_user!メソッドで、これを強制できる # app/controllers/application_controller.rb before_action :authenticate_user!, unless: :devise_controller? # コールバックに例外を追加 # app/controllers/pages_controller.rb skip_before_action :authenticate_user!
ルートパス
# config/routes.rb root to: "pages#home"
view更新
# config/initializers/devise.rb config.scoped_views = true
ログイン後のパス
# app/controllers/application_controller.rb def after_sign_in_path_for(resource) notes_path end
Flash メッセージ
DOM からメッセージを削除する
bin/rails generate stimulus removals
// app/javascript/controllers/removals_controller.js import { Controller } from "@hotwired/stimulus" export default class extends Controller { remove() { this.element.remove() } }
おまけ HelloController削除
bin/rails destroy stimulus hello 削除 import HelloController from "./hello_controller.js" application.register("hello", HelloController)
container
rails generate scaffold Container name:string
関連付け
% bin/rails generate migration add_container_reference_to_users container:references % bin/rails generate migration add_note_reference_to_name_list note:references
nullを許可する
add_reference :users, :container, foreign_key: true belongs_to :container, optional: true
bin/rails db:drop db:create db:migrate
% rails generate controller Companies new create
取り消し
% rails destroy scaffold Company name:string
一意制約を追加
rails generate migration add_unique_constraint_to_containers
note
% rails generate scaffold Note name:string kind:integer line:integer
関連付け
% bin/rails generate migration add_container_reference_to_notes container:references
client
% rails generate scaffold Client note:references name:string kana:string email:string line:integer
ラベル
client label
rails generate scaffold ClientLabel note:references name:string
中間テーブル
rails generate migration CreateJoinTableClientClientLabel client client_label
見出しタイトル
% rails generate scaffold NameList name:string kana:string head:boolean line:integer buddhist_name:string alive:boolean birth:string death:string g_age:string memo:text generation:string
validates :name, presence: true
t.string :name, null: false
% bin/rails db:drop db:create db:migrate
% bin/rails test:system
% bin/dev
テストデータ
テストデータと開発データの同期
# db/seeds.rb puts "\n== Seeding the database with fixtures ==" system("bin/rails db:fixtures:load")
bin/rails db:seed
user
gem 'devise', '~> 4.9', '>= 4.9.2
% bundle install % bin/rails generate devise:install
bin/rails generate devise User Confirmableをコメントアウトする bin/rails db:migrate
view更新
# config/initializers/devise.rb config.scoped_views = true
ログイン後のパス
# app/controllers/application_controller.rb def after_sign_in_path_for(resource) notes_path end