Rails関連のことを調べてみた2022年03月25日

Rails関連のことを調べてみた2022年03月25日

Rails のscaffold

駆け出しエンジニアのTakaです。
本日からQittaを書くことにしました。
よろしくお願いします。
本日のテーマは、scafoldです
アプリを作るためには、viewやcontroller,routesなど様々な機能が必要になってきます。
scaffoldはこれらの作業をまとめて行って、簡単にアプリケーションの雛形を作ってくれます。

“`
rails generate scaffold post title:string body:text
“`
を入力すると、
Postモデルは名前を表す「title」属性と年齢を表す「body」属性を持つとします。

“`
rails db:migrate
rails server
“`
必ず、データベースとやりとりできるマイグレーションファイルの作成もしておきましょう。

元記事を表示

【Docker】RailsにNginxを導入する方法

## はじめに
 本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## Nginx + Puma + Rails + MySQL
Dokerfileで親ディレクトリを参照するにはDocker-composeのbuildの箇所でcontextとdockerfileを指定します。

“`docker-compose.yml
version: ‘${COMPOSE_VER}’
services:
db:
platform: linux/x86_64
build: ./docker/db
command: –default-authentication-plugin=mysql_native_password && bash -c “chmod +x /docker-entrypoint-initdb.d/00_grant.sh”
heal

元記事を表示

【個人開発】ガン飛ばしてちょいワル気分になれるサービスを開発しました(-“-#)

# はじめに
早速ですが大人になるにつれ怒りの感情を表に出さなくなったと思う方はいませんか?
今回はそんな世の大人達の為にガン飛ばして遊べる~~物騒なクソ~~コンテンツアプリを作成しました!
– 普段優しそうというイメージを持たれてるけど、たまには悪ぶりたい人
– 舐められたくない人
– いざという時のために相手を威嚇する練習をしたい人
– 今むしゃくしゃしている人
– 東京リベンジャーズが好き!

そんな方々に是非使ってみて欲しいサービスです◎

本記事では主な機能や技術面の紹介をさせて頂きます。
面白い!と思って頂けたらエンジニア冥利に尽きます…!

# サービス概要
[![Image from Gyazo](https://i.gyazo.com/900b2d9980232c075a0feb785600a0bf.png)](https://gyazo.com/900b2d9980232c075a0feb785600a0bf)
カメラに向かってガン飛ばすだけ!
「たまにはちょっと悪ぶりたい〜(-“-#)」
そんな少しやんちゃな想いを叶えるサービスです◎

https://ww

元記事を表示

.envファイルについて

# はじめに
アプリ制作を進める中でよく分からず.envファイル使用していたのでこちらについて調べて見ました。

# .envファイルとは
環境変数を書きことができるファイルのことです。
こちらを使用することで、開発環境と本番環境を切り替えたり、データベースなどの接続情報の変更を行うことができます。
例えば開発環境では簡易的に利用できるsqliteのデータベースに接続し、本番環境ではmysqlのDBに接続といった変更が可能です。

# 環境変数とは
全てのプログラムで一緒に使える値を入れておく箱のことです。
例えば、アプリのフォルダーの直下に.envファイルに環境変数を書き込めば、そのフォルダー内で環境変数が扱うことができます。

# Railsで.envファイルを使用する場合
Gemfileに以下を記述

“`Gemfile
gem ‘dotenv-rails’
“`

gemを インストール

“`bash
$ bundle install
“`
こちらを使用することで、プロジェクト毎に環境変数が扱えるようになります。
# 使用例
簡単ではありますが、使用例を紹介します。

元記事を表示

Rails migration

### 命名規則
“`terminal.sh
rails generate migration CreateProducts name:string
rails generate migration AddPartNumberToProducts
rails generate migration RemovePartNumberFromProducts
rails generate migration AddUserRefToProducts user:references
rails generate migration CreateJoinTableCustomerProduct
“`

### changeを使う
Active Recordがマイグレーションを逆進させる(以前のマイグレーションに戻す)方法を自動的に理解してくれるため、多くの場面で利用できます。up/downを書かなくて良い。

– add_column
– add_foreign_key
– add_index
– add_reference
– add_timestamps
– change_colum

元記事を表示

rails_tutorial chapter7 part2 <忘備録>

form_withは重要なパートですね。

まず下処理として、以下の記述
“`users_controller.rb



def new
@user = User.new
end
“`

view側で以下を記述

“`app/views/users/new.html.erb

Sign up

<%= form_with(model: @user, local: true) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>

<%= f.label :email %>
<%= f.email_field :email %>

<%= f.label :password %>
<%= f.password_field :password %>

<%= f.label :password_

元記事を表示

カレンダーミニアプリを作ってみた

RailsのGemであるSimple Calendarを利用して、ミニアプリを作ってみた。

## アプリの新規作成
まずはアプリの新規作成から。
ターミナルで以下を実行する。

“`:ターミナル
rails _6.0.0_ new minicalendar -d mysql
“`

次にencodingの設定を変更。

“`yaml:config/database/yaml
default: &default
adapter: mysql2
encoding: utf8 #ここを変更する
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
“`

.gitignoreファイルの一番下の行に、.Ds_Storeと追記。

“`:gitignore
/public/packs
/public/packs-test
/node_modules
/yarn-error.log
yarn-debug.log*
.yarn-integrity
.Ds_Store #ここに追記
“`

元記事を表示

WebブラウザはDELETEリクエストを発行できない

# ハマったこと
下記のようにdeleteリクエストを指定して送信したがGETメソッドになってしまう。
“` ruby: _header.html.erb
<%= link_to "Log out", logout_path, method: :delete %>
“`
#### 出たエラーメッセージ
Routing Error
No route matches [GET] “/logout”

# 原因
どうやらブラウザからDELETEリクエストを送ることができないみたいです。
[参考にした記事](https://teratail.com/questions/305773) ← 理由も乗ってます。
# 対策
link_toメソッドではなく、button_toメソッドで解消できるみたいです。
もっといいやり方ないんだろうか、、、
“` ruby _header.html.erb
<%= link_to "Log out", logout_path, method: :delete %> # 削除した
<%= button_to "Log out", logout_path,

元記事を表示

【Ruby】みんな理解出来てる?テンプレートメソッドパターンのこと。

# テンプレートメソッドパターンとは?
テンプレートメソッドパターンは[GoF](https://gimo.jp/glossary/details/gang_of_four.html)のデザインパターンの一種です。

このパターンは、基底クラスに不変の部分を記述し、変わる部分はサブクラスに定義するメソッドにカプセル化するというモノです。
`変わるものと変わらないものを分離する`という設計の考えに基づいています。

つまり次の2つのオブジェクトによって構成されます。

“`ruby
– 骨格となる「抽象的な基底クラス」
– 実際の処理を行う「サブクラス」
“`

## メリット
– 基底クラス側に、「不変の基本的なアルゴリズム」を配置可能になる。
– 「高レベルの処理を制御すること」に集中できる。
– サブクラス側に、「変化するロジック」を置ける
– 「詳細を埋めること」に集中できる
– 似通った部分を共通化して「サブクラスに対してスーパクラスで実装されている抽象メソッドを実装する」という責任を与えることが可能になる。

## 実装例

### 基底クラス

“`r

元記事を表示

【Ruby】構造体クラスを使いこなしたい。

# 概要
みなさん。「構造体クラス」使ってますか?
たくさん利用してる人もいれば、聞いた事もない人がいるかと思います。
便利なRubyのクラスなのでぜひ頭の隅にでも置いておいてください!

## Sturctとは
Rubyにおける構造体クラス(Struct)は簡易的なクラスのようなものです。
明示的にアクセスメソッドを定義しなくても、構造体クラス外でメンバの参照・更新は可能です。

以下のような場面で使えます。
– まとまったデータを扱いたいが、クラス定義式を使ってクラスを作るまでもない場合。
– クラス内で特定のデータのまとまりを表現する場合。

### 定義方法

以下のように定義することで構造体クラスを使えるようになります。

“`ruby
# Struct.new(‘構造体クラス名’, メンバ)
Struct.new(“User”, :name, :age)

# 第一引数を省略する事も可能
User = Struct.new(:name, :age)

# クラスのように定義する事も可能(非推奨)
class User < Struct.new(:name, :age) e

元記事を表示

【Rails】なぜ”private” “protected” “public”に分けるのか

# 概要
あるメソッドを実装するときに「アクセス権をどうするか?」という問題に必ず直面すると思います。
それぞれの特徴を知っておくことで、効率良く設計・開発が可能です。
ちなみにこれは`カプセル化`と言い、、オブジェクト同士の紐付き(関係性)を薄くし独立性を高め、再利用や交換といった保守性を高める効率の考え方です。

## 特徴
### publicメソッド

“`
– クラスの主な責任や目的を明らかにする
– 外部から実行されることが想定される
– 思いつくままに変更されたりはしない
– 他者が依存したとしても安全
– テストで完全に文書化されている
“`

### privateメソッド

“`
– 実装の詳細に関わる部分
– 外部から実行されることは想定されていない
– 変更されやすい
– 他者が依存するのは危険
– 基本的にはテストはしない(個人的な意見です。諸説あり。)
“`

### protectedメソッド

“`
– 外部からは隠蔽されている
– 仲間(自クラスかサブクラスのレシーバー、親子関係にあるクラスのみ)からは実行可能
“`

## 判断のポ

元記事を表示

rails_tutorial chapter7 part1 <忘備録>

開発環境でデバッグを表示する

<%= debug(params) if Rails.env.development? %>

/users/1 のURLを有効にするために、routesファイル(config/routes.rb)に次の1行を追加します。
“`routes.rb
resources :users
“`

以下のroutesが用意される。

| 1 | 2 | 3 | 4 | 5 |
|:-:|:-:|:-:|:-:|:-:|
|HTTPリクエスト|URL | アクション | 名前付きルート | 用途 |
| GET| /users | index | users_path | すべてのユーザーを一覧するページ |
| GET | /users/1 | show | user_path(user) | 特定のユーザーを表示するページ |
| GET | /users/new | new | new_user_path | ユーザーを新規作成するページ(ユーザー登録) |
| POST |/users | create

元記事を表示

[Rails] Address already in use が発生してrails sができなかった

## 前提
・Dockerで環境構築をしている
・Rails 6.1.5

## エラーの内容
“`
`initialize’: Address already in use – bind(2) for “0.0.0.0” port 3000 (Errno::EADDRINUSE)
“`

## 原因
既に3000Portが使われているため同じポート番号は使えないよというエラー

## 解決策
3000Portを使用しているプロセスを終了する

### ①3000Portを使用しているプロセスの番号を調べる

“`
# 現在、実行しているプロセスを表示するコマンド
$ ps -x

PID TTY STAT TIME COMMAND
1 pts/0 Ss+ 0:00 irb
8 pts/1 Ss+ 0:00 /bin/bash
15 pts/2 Ss+ 0:00 /bin/bash
32 pts/1 Z+ 0:00 [ruby]
64 pts/3 Ss+

元記事を表示

【rails】DBアクセス時のログにLoadと表示されるメソッドと、表示されないメソッドの違いとは

DBアクセス時に、`モデル名 Load`と表示されるメソッドの例
“`
User.all
=> User Load (4.6ms) SELECT “users”.* FROM “users”

User.first
User Load (5.2ms) SELECT “users”.* FROM “users” ORDER BY “users”.”id” ASC LIMIT 1

User.find(1)
User Load (1.4ms) SELECT “users”.* FROM “users” WHERE “users”.”id” = 1 LIMIT 1
“`

DBアクセス時に、`モデル名 Load`とログに表示されないメソッドの例
“`
User.count
(2.0ms) SELECT COUNT(*) FROM “users”

User.pluck(“email”)
(1.7ms) SELECT “users”.”email” FROM “users”
“`

上記の違いは単純で、モデルオブジェクトの構築の有無です。
`モデル名 Load`のようにログ

元記事を表示

イマドキのオススメ gem on Rails

# はじめに
※ この文章は永遠のベータ版です。

ググったり、Qiita / Zenn の記事を見たり、していると、以前は利用者が多く、
開発もアクティブだったものの、今は最早メンテナンスすらされて
いない、RailsのメジャーVer UP への追従の怪しい gem が
使われたりしている、ので、イマドキの オススメgem を
まとめてみます。

Railsに限らず、アプリを開発する際には、利用するライブラリの
開発・メンテナンスがアクティブかどうか、継続的な開発・メンテナンスが
期待できるか、への注意が必要です。

非アクティブor開発・メンテナンスの継続性に不安がある なら、そのライブラリの
採用を見合わせる or 同等の機能を提供する他のライブラリに移行する、のが
無難です。

# ファイル・アップローダ

| 名前 | オススメ度 | アクティブ| 備考 |
|:-:|:-:|:-:|:-:|
| Shrine |◎| ✔︎ ||
| CarrierWave |○| ✔︎ ||
| ActiveStorage |△| ✔︎ | Rails公式 |
| Refile | ✕ |

元記事を表示

RailsアプリにChoices.jsを使ったセレクトボックスを作る

## 概要
Choices.jsを使ってセレクトボックスを作成しました

## はじめに
現在、[フィヨルドブートキャンプ](https://bootcamp.fjord.jp/)でチーム開発をしています。
[Choices.js](https://github.com/Choices-js/Choices)というライブラリを使って、セレクトボックスを作成しましたが、情報が少なかったのでQiitaに記事として残しておきます。
初学者向けの内容となっています。

## Choices.jsについて
軽量な選択ボックス/テキスト入力プラグインです。リッチなセレクトボックスが作れます→[DEMO](https://choices-js.github.io/Choices/)
Select2およびSelectizeに似ていますが、jQueryの依存関係はありません。
2年ほどリリースが止まっていたようですが、2021年の12月より再びメンテナンスされているようです。

## インストール
– npm
“`
npm install choices.js
“`
– yarn
“`
yarn

元記事を表示

Rails + RBS & Steepを試してみて困ったところとか感想とか

## まえがき

Railsアプリに型チェックを導入しようとして試しているのですが、なかなか一筋縄ではいかないようで、試行錯誤しています。

おそらく他にも似たようなことでハマったりしている人もいるかと思うので、これまで困ったこと、そして(回避できた場合は)回避策を書いてみます。

なお、RBSやSteepとはなんぞやといった辺りは特に説明せずにいきなり本題に入るため、詳しくない方は[mameさんの記事「Ruby 3の静的解析機能のRBS、TypeProf、Steep、Sorbetの関係についてのノート」](https://techlife.cookpad.com/entry/2020/12/09/120454)などを参考にしてください。

## Steep & RBSで困ったところ

### BigDecimalを導入してもto_dが使えない

(追記: ksssさんにrbsのstdlibのテストの書き方を教えてもらったので書けるようになりました! 結果は[pull request](https://github.com/ruby/rbs/pull/936)してみたので、最終的に取り

元記事を表示

rails 7系でjqueryが読み込めない問題

タイトルの通りです。rails7系からimportmapとやらを採用しているらいがいまいちわからなかったので緊急でとった対策を書きます。
# 開発環境
ruby 3.1.1
Rails 7.0.2.3

# できなかったこと
ドロップダウンメニューを作りたかったのですがrailsでimportmapとやらの仕組みがよくわからず、jqueryが読み込めなかった。
どうやらconfig/importmap.rbに読み込む際の名前と読込みたい内容(cdnやら)を記載してapp/javascript/application.jsで読み込めばいいらしいですがどうもうまくいきませんでした。
[ここ](https://www.bokukoko.info/entry/2022/02/15/153751)を参考にさせていただきました。

# 対策(緊急向け)
力技みたいな感じになりますが、以下のコードを追加したら読み込めます。笑
とりあえず先に進みたいって方向けです。

“`ruby:view/layouts/application.html.erb