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

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

5分でRailsにletter_opener gemを導入する

# 環境
Rubyバージョン: `ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]`
Rails Gemバージョン: `6.1.4.1`
letter_opener Gemバージョン: `1.7.0`

# 参考サイト
– https://github.com/ryanb/letter_opener/blob/e501aff72036f67c4bb1840ead48dda0e47340d5/README.md

# letter_openerとは?
メールが送信される代わりに、ブラウザでメール内容が表示される開発用gemです
デフォルトの場合development環境でメールが送信された時コンソールにメール内容が表示されますが、流れてしまって見づらいのでこれを使うと便利です
これを使うとdevelopment環境なのにわざわざgmailを設定するなんて手間も掛からず開発を楽にしてくれます!
※letter_opener_webとは異なるので注意

# 導入

## Gemfileに追加
`Gemfile`の`gr

元記事を表示

railsアプリをHerokuデプロイする際につまづいたエラーたち

herokuにデプロイした際に出たエラーの対応を、備忘として記録します

# 起きたエラーたち
1. Your bundle only supports platforms [“x86_64-darwin-20”] but your local platform is x86_64-linux. Add the current platform to the lockfile with `bundle lock –add-platform x86_64-linux` and try again.
2. Sprockets::DoubleLinkError: Multiple files with the same output path cannot be linked (“sessions.css”)
3. Module not found: Error: Can’t resolve ‘../images’ in ‘/tmp/build_bc38a87c/app/javascript/packs’

## 1. Your bundle only supports platforms

元記事を表示

railsコンソール第七章 Userリソース

###Userリソース
ユーザープロフィールページを作成するには、その前に“`データベースにユーザーが登録“`されている必要があります。
このWebサイトでは、“`登録ページがない状態でどうやってユーザーを登録しておけばよいでしょうか“`。
前回Railsコンソールを使ってユーザーレコードを登録してありました。
したがって、データベースの中に一人のユーザーがいるはずです。

“`rb
>> User.count
(1.5ms) SELECT sqlite_version(*)
(0.7ms) SELECT COUNT(*) FROM “users”
=> 3
>> User.first
User Load (0.8ms) SELECT “users”.* FROM “users” ORDER BY “users”.”id” ASC LIMIT ? [[“LIMIT”, 1]]
=> #

元記事を表示

railsチュートリアル第七章 ユーザー登録

Userモデルができあがったので、いよいよ“`ユーザー登録機能“`を追加しましょう。
HTML フォームを使ってWebアプリケーションに“`登録情報を送信“`します。
続いて7.4ではユーザーを新規作成して情報を“`データベースに保存“`します。
ユーザー登録手続きの最後には、作成されたユーザーの“`新しいプロフィールを表示できるようにするため“`に、ユーザーを表示するための“`ページを作成“`し、“`ユーザー用のRESTアーキテクチャを実装“`する第一歩を踏み出します。
実装した簡明かつ表現豊かな統合テストに対して、 いくつかのテストを追加していきます。
本章では、有効なメールアドレスを持っている(可能性のある)“`新規ユーザーを増やしていきます“`。
第11章では、 メールアドレスが本当に有効であることを確かめるために、“`アカウントを有効化する機能“`をサインアップの手順に追加します。

ここから難しくなるらしい。

##ユーザーを表示する
この節では、まず“`ユーザーの名前とプロフィール写真“`を表示するためのページを作成します。
モックアッ

元記事を表示

Rails devise_token_authの各種メソッドについて

#devise_token_authとは
***ユーザー認証するためのgem***のことです。
ユーザー認証のためには***devise***を使います。
例えば新規登録、ログイン、ログアウト、アカウント削除、ゲストログインなどです。

⚫︎補足
“`ゲストログインとは“`
通常はログインをするときはそのアカウントの持ち主だけしかログインしませんが
ゲストログイン機能があるとアカウントの持ち主でなくてもログインできる機能です。
就職活動でポートフォリを作成する時でも、採用担当がアプリの中身を見れるので
よく使われるみたいです。
https://qiita.com/take18k_tech/items/35f9b5883f5be4c6e104

#devise_token_authで提供されているメソッド

公式ドキュメントに載っているcontrollerメソッドは下の4つです。
 
1 ***before_action :authenticate_user!***

2 ***user_signed_in?***

3***current_user***

4***user_se

元記事を表示

Active Modelについて

# Active Model
Active Modelは、Active Recordからデータベースに関連する部分を切り除いた機能を提供する。
それらのうちいくつか主要なモジュール、FormObjectで使用するモジュールなどについて説明していく。

# ActiveModel::AttributeMethods
attr_accessor で定義されたアクセサに対して、一括で値を設定することができる機能を提供する

# ActiveModel::Callbacks
コールバックを提供するモジュール。標準で提供されている[コールバック](https://railsguides.jp/active_record_callbacks.html#%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF)の他に、カスタムでコールバックを追加するための[メソッド](https://railsguides.jp/active_model_basics.htm

元記事を表示

[リファクタリング] 1週間の投稿数 特定の期間の投稿数表示 scope 引数 map reverse

初めに

ポートフォリオで、過去1週間の投稿数を表示させるグラフを作成していましたが、
今回リファクタリングをしてみました。

![スクリーンショット 2021-10-02 21.53.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/5776d8ee-4430-bfcd-917f-6447c1284a8c.png)

リファクタリング前の実装記事は以下です

https://qiita.com/ki_87/items/cbfdb803355ba4e4fe55

https://qiita.com/ki_87/items/37e9f42c118f87416aa6

https://qiita.com/ki_87/items/6a0f8f3ee01c538bb75e

リファクタリング前

“`ruby:post.rb
scope :created_yesterday, -> { where(created_at: 1.day.a

元記事を表示

Rails Model 関連の作成方法

# 多対多

“`ruby:post.rb
class Post < ApplicationRecord has_many :tags, class_name: 'Tagging' has_many :programming_languages, through: :tags end ``` ```ruby:tagging.rb class Tagging < ApplicationRecord belongs_to :post belongs_to :programming_language end ``` ```ruby:programming_language.rb class ProgrammingLanguage < ApplicationRecord has_many :tags, class_name: "Tagging" has_many :posts, through: :tags end ``` ## #has_many ### 第1引数 `has_many`の第一引数に渡したシンボルがそのままメソッド名になる。 この例では、Po

元記事を表示

M1MacでRails6環境の構築手順メモ

# 0. 概要
M1プロセッサ搭載のMacbook-Airを持っています。その環境に、Dockerを入れて、コンテナとしてUbuntuを構築して、Ubuntu上でrails6を構築しようとしました。すると、yarnのインストールを行う手順でメモリ違反が発生してインストールすることができませんでした。結果的にはUbuntuのバージョンを18.04ではなく、20.04をインストールことで対応できました。

# 1. 環境
machine : MacBook Air (M1, 2020)
OS : macOS BigSur Version 11.5.2

# 2. MacBook
## 2.1. docker インストール
– docker公式ページ[https://hub.docker.com/editions/community/docker-ce-desktop-mac] の「Mac with Apple chipe」からダウンロードする。
– ダウンロードした「docker.dmg」をダブルクリックする。
– 画面に従い、dockerアイコンをアプリケーションフォルダに移動

元記事を表示

Rails ~Rspec環境~

# Rspec

## Install
“`
group :development, :test do
gem ‘rspec-rails’, ‘~> 5.0.0’
end
“`

`rails generate rspec:install`

## Configuration

### .rspec
“`:.rspec
# 全てのファイルでrequireを宣言しなくてもspec_helperがロードされる
–require spec_helper
# 出力を色付け
–color
# 出力形式を詳細に記載
–format documantation
“`

`rails_helper.rb`で `require spec_helper`がされているので、このファイルを `.rspec`内に記載すれば良いように思えるが`spec_helper.rb`ファイルにコメントアウトされている記述によると、全てのファイルにロードされるものなのでできるだけ軽量な依存にとどめておくのがベターであると。

## Factory bot rails

### Install
“`
gro

元記事を表示

rails g または rails c を実行するとCPU使用率が100%(熱くなる)になる

# 事象
railsコマンドを使っているとPCが非常に熱くなりました。
再起動を行うと解消されますが、railsコマンドを使うと再び熱くなりました。
熱くなるコマンドは以下でした(後で記載しているGemfileでわかりますが、developmentに関わるコマンドが影響あるようです)。

“`
* rails c
* rails g ~~
* bundle exec spec ~~
“`

熱くなったのでPCの状態を次のようにして確認しました。

“`shell:tarminl
% ps aux | head -n 2
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
username 68581 100.0 2.4 9070972 397040 ?? Rs 2:29PM 5:51.09 ruby -I /Users/username/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bun

元記事を表示

RuboCopの導入

学習のアウトプットとして投稿しています。
何かご指摘がございましたらお願いいたします。

# RuboCopとは
Rubyのコードを解析してくれる。コードに問題があるかどうかや、RuboCopで指定されているフォーマットに沿っているかなどを確認し、問題があった場合は指摘してくれる。直せる部分は自動修正してくれる機能がある。

## 実行環境
– macOS
– Ruby 2.6.7
– Rails 6.1.4.1
– RuboCop 1.22.0

## 設定
gemfileに以下を追加する。rubocopはターミナルから使用するので、`require: false`を加える。これによりRailsアプリには自動的に読み込まれなくなる。

“`ruby:Gemfile
group :development do
gem ‘rubocop’, require: false
gem ‘rubocop-rails’, require: false
gem ‘rubocop-performance’, require: false
end
“`
### 拡張gem
■ ruboc

元記事を表示

railsチュートリアル第六章 ユーザーの作成と認証

###ユーザーの作成と認証
以上でUserモデルの基本部分が完了しましたので、今度はユーザー情報表示ページを作成するときに備えて、“`データベースに新規ユーザーを1人作成“`しましょう。
また、Userモデルに“`has_secure_password“`を追加した効果についても見ていきましょう。

ただしWebからのユーザー登録はまだできないので、今回はRailsコンソールを使って“`ユーザーを手動で作成“`することにしましょう。“`create“`を使いますが、後々実際のユーザーを作成する必要が出てくるので、今回はサンドボックス環境は使いません。
したがって、今回作成したユーザーを保存すると、“`データベースに反映“`されます。
それでは、まずrails consoleコマンドを実行してセッションを開始し、次に有効な名前・メールアドレス・パスワード・パスワード確認を渡してユーザーを作成してみましょう。

“`rb
>> User.create(name: “Michael Hartl”, email: “micael@example.com”,
?>

元記事を表示

ハッシュ

ハッシュとは中身の値 バリュー をそれに対応する名前 キー で管理することができます。配列と同じように複数の値を持つことができる。

“`ruby
変数 = {}
“`

で生成でき

“`ruby
変数 = {キー1 => バリュー1,キー2 => バリュー2}
“`

シンボルを使用すると

“`ruby
変数 = {キー1 :バリュー1,キー2 :バリュー2}
“`

となり、上記も下記も出力すると同じものが出力される。

ハッシュに値を追加するには

“`ruby
変数 = {}
変数[追加したいキー] = バリュー
“`

で追加できる。

例えば

“`ruby
men = {name :Taro,age :28}
“`

に身長(キー) 179(バリュー)を追加したければ

“`ruby
men[height] = 179
“`

となる。

ハッシュを取得したい場合は
ハッシュ[取得したいキー]で取得できる。配列では添字だったがハッシュはキー(名前)でバリュー(値)を管理しているのでキーを指定する。
menのageを取得したい場合は

“`ru

元記事を表示

保存済みのマイグレーションファイルを編集する方法

こんにちは!テックアカデミーのWebアプリコースを受講している駆け出し高校生エンジニアの安田駿介です。

今回は、「保存済みのマイグレーションファイルを編集する方法」というテーマで解説していきます。

# 保存済みのマイグレーションファイルを編集する手順
1.rails db:migrate:status
2.rails db:rollback
3.rails db:migrate:status
4.マイグレーションファイルを編集
5.rails db:migrate

という手順です。

# 解説

1と3のrails db:migrate:statusは、マイグレーションファイルの状態を確認するコードです。

2のrails db:rollbackは、1で状態を確認したときに、一番下のupになっていたマイグレーションファイルをdownにするコードです。

これにより、マイグレーションファイルを編集することができます。

マイグレーションファイルを編集したら、5のrails db:migrateで保存しましょう。

rails db:migrate:statusで確認したら、upにな

元記事を表示

配列

配列とは一つの変数で複数の値を持つことができる値で、中のデータは要素と呼ぶ。要素は順番をもっていて配列に入ると自動的に与えられる。
変数 = [値] で定義できる。
後から要素を追加することもでき
変数 << 値 で追加できる。 << これを配列演算子という。 要素には添字という番号が割り振られており、 ```ruby animals = [“サル”,”イヌ”,”キジ”] ``` では、サルが0、イヌが1、キジが2、というふうになっている。 配列の要素を取得した場合は ```ruby 配列[添字] ``` で取得できる。animalsでイヌを取得したい場合は ```ruby animals[1] ``` となる。 ```ruby 変数 = 配列[添字] ``` で配列の要素を取得し変数に代入することができる。 配列の値を変えたい場合は ```ruby 配列[添字] = 値 ``` で変更できる。animalsのキジをハトに変えたい場合は ```ruby animals[2] = “ハト” ``` となる。 lengthメソッドを使うと配列の要素の数を数え

元記事を表示

railsチュートリアル第6章 ユーザーがセキュアなパスワードを持っている

###ユーザーがセキュアなパスワードを持っている
Userモデルに“`password_digest“`属性を追加し、Gemfileにbcryptを追加したことで、ようやくUserモデル内で“`has_secure_password“`が使えるようになりました。

####Userモデルにhas_secure_passwordを追加する

“`rb
class User < ApplicationRecord before_save { email.downcase! } # データベースに保存する前に処理をする。 # 入力されたメールアドレスを小文字にする。 validates :name, presence: true, length: { maximum: 50 } #属性はname,属性の存在を検証、 最大50字まで VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, length: { maximum: 2

元記事を表示

railsチュートリアル第6章 パスワードの最小文字数

###パスワードの最小文字数
パスワードを簡単に当てられないようにするために、パスワードの“`最小文字数を設定“`しておくことは一般に実用的です。
Railsでパスワードの長さを設定する方法はたくさんありますが、今回は簡潔にパスワードが“`空でない“`ことと“`最小文字数(6文字)“`の2つを設定しましょう。
パスワードの長さが6文字以上であることを検証するテストを示します。

####パスワードの最小文字数をテストする

“`rb
require ‘test_helper’

class UserTest < ActiveSupport::TestCase def setup @user = User.new(name: "Example User", email: "user@example.com", password: "foobar", password_confirmation: "foobar") end . . . test "password should be present (nonbla

元記事を表示

保存済みのマイグレーションファイル削除してしまったときの解決法

こんにちは!テックアカデミーのWebアプリコースでプログラミングを学んでいる駆け出し高校生エンジニアの安田駿介です。

今回は「Railsで保存済みのマイグレーションファイル削除してしまったときの解決法」について紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903726/fb68c064-13db-b148-764e-53678586aa1e.png)

このように、保存(up)しているファイルを削除してしまったときの解決法を書いていきます。

ちなみに、マイグレファイルの確認するには、rials db:migrate:statusを実行します。

# マイグレーションファイルを削除してしまったときの解決法

rails db:migrate:reset

をターミナルで実行してください。

# 実行結果

すると、先程のマイグレファイルがこのようになります。

![image.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

railsのjoinsメソッドは何をやっているのか?

皆様お久しぶりです、プレイライフの熊崎です!
最近体調を崩すことが多く、アウトプットができておりませんでした。
体調を崩していた私が言うのもどうかとは思いますが、季節の変わり目ですので体調管理には気をつけましょう!

というわけで、久々のアウトプットを行っていきたいと思います。

## joinsメソッド
内部結合を行うメソッド。

## 内部結合

### 結合とは?
> SQLで、このような複数のテーブルに格納されたデータを集めた表を作る処理を「結合」と呼びます。
ref: https://style.potepan.com/articles/17010.html

### 内部結合とは?
結合にもいくつか種類があり、その中の一部。

>INNER JOINは、結合するテーブルのデータのうち、条件に指定したカラムの値が一致するデータのみを結合します。
ref: https://style.potepan.com/articles/17010.html

例: 書籍(books)テーブルと著者(authors)テーブルを内部結合する。

#### booksテーブル
| id |

元記事を表示

OTHERカテゴリの最新記事