月別アーカイブ: 2021年12月

Docker+rails環境下でモデルの追加方法と1対多の紐付け

データベースを作成するコマンド

docker-compose exec web bundle exec rake db:create

モデルを追加するコマンド

docker-compose run web bundle exec rails g model task user:references name:string cotent:text

モデルを削除したいときのコマンド

docker-compose run web bundle exec rails destroy model task

データベースを削除する場合はこうする

class CreateMacs < ActiveRecord::Migration[5.1]
 def change drop_table :macs
 end
end

マイグレートするためのコマンド

docker-compose exec web bundle exec rake db:migrate

1つ前にロールバックしたいときのコマンド

docker-compose exec web bundle exec rails db:rollback

seedファイルを使う時に、まずはリセット

docker-compose run web bundle exec rails db:migrate:reset

データベース上にサンプルユーザーを生成する

docker-compose run web bundle exec rails db:seed

1対多の場合は1の方(例としてuserとする)has_many :tasks, dependent: :destroyを追加記述することで、userを消したときに紐付いているtaskも削除されるようにできる!

Railsのgem「annotate」の使い方(Docker環境)

annotateとは?

モデルにデータベースのスキーマ構造をannotate(注釈)してくれるGem

テーブルを確認する時にDBに潜る必要がなくなるよ。

Dockerでの使い方

Gemfileのgroup :development doに

gem 'annotate'

を記述します。

docker-compose down でコンテナを削除

docker-compose build でコンテナを作り直し

docker-compose up -dで起動してから次のコマンドをする

docker-compose exec web bundle exec annotate 

変わらなかったときは、次のコマンドをする。

docker-compose exec web bundle exec rails g annotate:install

(次回のマイグレーション以降、自動でアノテーションしてくれるコマンド)

もう一度↓をコマンド

docker-compose exec web bundle exec annotate

Annotated (7): app/models/task.rb, test/models/task_test.rb, test/fixtures/tasks.yml, test/fixtures/tasks.yml, app/models/user.rb, test/models/user_test.rb, test/fixtures/users.yml

↑のようにAnnotetedとなっていれば成功していて、次のように

例:app/models/user.rb

# == Schema Information
#
# Table name: users
#
#  id              :bigint           not null, primary key
#  admin           :boolean          default(FALSE)
#  email           :string(255)
#  name            :string(255)
#  password_digest :string(255)
#  remember_digest :string(255)
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
#
# Indexes
#
#  index_users_on_email  (email) UNIQUE
#
class User < ApplicationRecord
  has_many :tasks, dependent: :destroy
  attr_accessor :remember_token
  before_save { email.downcase! }
  validates :name, presence: true, length: {maximum: 15}
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
  validates :email, presence: true, length: {maximum: 100},
            format: {with: VALID_EMAIL_REGEX},
            uniqueness: {case_sensitive: false}
  has_secure_password
  validates :password, presence: true, length: {minimum: 5}, allow_nil: true

# == Schema Informationから始まるテーブル情報が記述されていればOKだよ

Rails+Docker環境下で(モデルにカラムを追加する)

Rails+Docker環境下でモデルにカラムを追加するには?

docker-compose run web bundle exec rails g migration AddYYYToXXX カラム名:データ型 (XXXはテーブル名、YYYはカラム名)

docker-compose run web bundle exec rails g migration AddDetailsToLists event:text

複数追加のときはAddDetailsToListsのようにカラム名は任意で良い(単体の場合は追加したいカラム名)

↑のようにマイグレーションファイルが生成される

マイグレートする

docker-compose run web bundle exec rake db:migrate

↑のようにマイグレート成功していればOK!

Docker環境下のpry-byebugの使い方(デバッグ)

Gemfileに以下を記述します。

group :development do
  gem 'pry-byebug' ←追加
end

docker-compose buildでコンテナを作る。

docker-compose build

docker-compose up -dでコンテナを起動する

docker-compose up -d

docker psでNAMESを確認

docker ps

docker attach lifehack_web_1

newメソッドにbinding.pryを追加

class TasksController < ApplicationController
  def new
    @task = Task.new
    binding.pry
  end
end

http://localhost:3000/tasks/newを開くかリロードして

ターミナルが↑のような表示になったらOK

@taskにいろいろ値を入れてみる

@task.title = 'task1'

@task.content = 'content'

@task.priority = 3

exitでデバッガーから抜けると

先程入力したオブジェクトがフォームにセットされた!

使い終わったらbinding.pryを消して

コントロールキー^を押しながらp,qキーの順に押すとアタッチが解除できる!

Docker環境でrails cするには?

Docker環境でrails cするには?

1:まずdocker-compose ps で確認する

docker-compose ps

赤枠の部分が重要

コンテナに接続する

#赤枠の部分(各々違うので注意)を↓に
docker exec -it lifehack_web_1 bash
bundle exec rails c

irb(main):001:0>というふうに表示されたらOKです。

もとに戻りたい時(コンテナの接続を外す)

exit

exit

でもとに戻ることができます。

Docker+Rails環境下でのユーザー削除の実装(退会機能の実装)

サンプルデータ生成タスクにadminユーザーを1人追加します。

db/seeds.rb

User.create!([{ name: "suzutuki",
  email: "example@railstutorial.org",
  password: "suzu",
  password_confirmation: "suzu",
  admin: true },
  { name: "suzu",
  email: "suzu1@railstutorial.org",
  password: "suzu",
  password_confirmation: "suzu"},
  { name: "suzu",
  email: "suzu2@railstutorial.org",
  password: "suzu",
  password_confirmation: "suzu"},
  { name: "suzu",
  email: "suzue3@railstutorial.org",
  password: "suzu",
  password_confirmation: "suzu"}])

seedファイルを使う時にはデータベースをリセットします。

docker-compose run web bundle exec rails db:migrate:reset

データベース上にサンプルユーザーを生成します。

docker-compose run web bundle exec rails db:seed

users_contorollerに以下の記述を追加します。

before_action :admin_user, only: [:show]

 def destroy
  @user = User.find(params[:id])
  @user.destroy if correct_user || admin_user
 end
  
private
 def user_params
  params.require(:user).permit(:name, :email, :password,
                          :image, :password_confirmation)
  end

# 正しいユーザーかどうか確認する
  def correct_user
    @user = User.find(params[:id])
    redirect_to(root_url) unless current_user?(@user)
  end

# 管理者かどうか確認する
  def admin_user
    redirect_to(root_url) unless current_user.admin?
  end

任意のユーザーが自分自身にアプリケーションの管理者権限を与えることを防止できます。

続きを読む

debugのやり方(Better Errors)

自分用にエラーが出たときの対応の仕方をメモしておく。

1:エラーをGemで見やすくする

Better_errorsの使い方(Docker)からBetter Errorsを導入

2:どこでエラーが起きたか調べる

エラーログの左側を見てどこでエラーが起きたか調べてみる

Application Frames: 自分が書いたコード

All Frames:                   ライブラリなど全部あわせたもの

またはdocker-compose up などでエラーログを見る

続きを読む

画像投稿機能の実装(Docker+rails+carrierwave+fog-aws+rmagick)

目標:ユーザーのプロフィールに画像をアップロードして設定できるようにしたい

以下のGemをGemfileに記述します。

コンテナを再起動する

docker-compose stop

docker-compose down

docker-compose build
#アップローダーを生成する
docker-compose exec web rails g uploader Image

userモデルに画像をアップロードするためにimageカラムを追加します。

docker-compose run web bundle exec rails g migration AddImageToUsers user image:string

マイグレートします

続きを読む

Ruby Mine(JetBrainsToolboxを使ってインストール)

JetBrainsToolboxとは?

JetBrainsツールを簡単に管理できるもの

  • インストール
  • 自動更新
  • IDEとプラグインを一緒に更新
  • ロールバックとダウングレード

パッケージ全体をダウンロードする代わりにパッチやパッチ一式をダウンロードし、IDEのメンテナンスにかかる時間と労力を節約することができる。 すべてがバックグラウンドで更新されるため、コーディングを一切中断する必要はありません。

Toolbox アプリをインストールする(Mac)

  1. JetBrainsの公式からダウンロードをクリック

  2. 「保存」をクリックしてダウンロード 続きを読む

RailsでSass変数で色の管理をする方法

動機

Sassで変数を定義する練習のため。

使い方

  1. app/assets/stylesheets/variables.scssを作成する。
$color-nobleblack:   #1d1d1f;
$color-white:        #fff;
$color-coffee_brown: #614226;
$color-thin_grey: rgba(250, 240, 230, 0.1);

2.変数を使うscssファイルで@import “color”;を記述

app/assets/stylesheets/base.scss

@import "variables";
//全体の設定
html {
  position: relative;
  min-height: 100%;
}

/* bodyからの設定 */
body {
  margin-bottom: 60px;
  border-top: 6px solid $color-coffee_brown;
  font-family: "SF Pro JP","SF Pro Text","SF Pro Icons","Hiragino Kaku Gothic Pro","ヒラギノ角ゴ Pro W3","メイリオ","Meiryo","MS Pゴシック","Helvetica Neue","Helvetica","Arial",sans-serif;
  line-height: 1.47059;
  background-color: $color-white;
  letter-spacing: -.022em;
  color: $color-nobleblack;
  overflow-x: hidden;
  font-style: normal;
}

変数の部分を変更するとインポートしている部分がすべて変わるので、便利な半面、気をつけて利用しよう!