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

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

【Ruby on Rails】初学者専用 デバック練習

Ruby on Railsの勉強を始めて3か月ほどがたちました。
自分でアプリケーションをつくっていくなかでたくさんエラーに悩まされました。

そのため、railsを始める人に知ってほしいエラー処理を作りました。
是非使ってみてください!!

コードはこちら↓
https://github.com/koya1616/debug1.git

それでは手順を説明していきます。

# リポジトリをクローンしてみよう
クローンについての記事はこちらもみるといいかもしれないです!
・[Git clone から pushまで](https://qiita.com/H-Toshi/items/df55d5024d9c0e2cfe22)

それではクローンしていきましょう

“`:terminal
$ git clone https://github.com/koya1616/debug1.git

$ cd debug1
“`
簡単ですね。

# dockerをつかってみよう
dockerは環境構築に使います。ぜひ使ってみてください。
・[dockerの使い方などなど](https://qiit

元記事を表示

駆け出しエンジニアの「ポートフォリオどうしよう?」を解決するサービスをリリースしました

## はじめに

駆け出しエンジニアのみなさん、ポートフォリオ[^1]作成に悩んでいませんか?

[^1]: 駆け出しエンジニア界隈の「ポートフォリオ」とは、技術力などを示す個人開発サービスを指します。

駆け出しエンジニアにとっては、企画から開発まで自力でできる力を示すために、**いかにポートフォリオを作り上げるか**ということが重要です。
しかし、初めての人がゼロから1つのプロダクトを作り上げるのはとても大変です。

– みんなはどんなポートフォリオをどんな技術で作っているんだろう?
– 自分と同じくらいの規模のプロダクトのソースコードを見てみたい

そんな悩みを解決するために開発したのが、このポートフォリオ集約サービス**「Fledge Hub」**です。

**https://fledge-hub.com**

https://fledge-hub.com

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322882/77f8d061-be7d-b902-cf76-d967a

元記事を表示

Railsテスト(RSpec)記事12選

#RSpecとは?
RspecとはRuby用のテストフレームワークです。RSpec は Gem パッケージとして提供されていますのですぐに導入できます。

#記事
RSpecについて書かれている記事たちです。参照しやすいように一箇所にまとめました。

https://qiita.com/tatsurou313/items/c923338d2e3c07dfd9ee

https://qiita.com/jnchito/items/42193d066bd61c740612

https://zenn.dev/fjsh/articles/b300fd2f8eec77

https://qiita.com/kskinaba/items/38b143e79bdfd44cc42a

https://qian-dao-zhen-yi.gitbook.io/rspec-style-guide/

https://qiita.com/yamaday0u/items/c3bf6036e11298771a99

https://zenn.dev/yukihaga/articles/816758ff6f0bd

元記事を表示

railsチュートリアル第9章 [Remember me]をテストする

###[Remember me]をテストする
####テストされていないブランチで例外を発生する
app/helpers/sessions_helper.rb

“`rb
module SessionsHelper
.
.
.
# 記憶トークンcookieに対応するユーザーを返す
def current_user
if (user_id = session[:user_id])
# ログイン中のidを代入する
# 永続セッション(ログイン中)にするため
@current_user ||= User.find_by(id: user_id)
# カレントユーザーまたは検索結果があったものを代入する
elsif (user_id = cookies.signed[:user_id])
# そうでなければ 書名付きクッキーを代入
raise
# テストがパスすれば、この部分がテストされていないことがわかる
# プログラムを強制的に終了させて、ログをみることができます。

元記事を表示

railsチュートリアル第9章 [Remember me]のテスト

##[Remember me]のテスト
・チェックボックスのエラーを確認するため
・ユーザーを永続化するコードの中心部分が、実はまだまったくテストされていない
・チェックボックスが常にオンの状態になる。
####log_in_asヘルパーを追加する
test/test_helper.rb

“`rb
.
.
.
# テストユーザーとしてログインする
def log_in_as(user)
session[:user_id] = user.id
# ユーザーidを代入させる
end
end

class ActionDispatch::IntegrationTest

# テストユーザーとしてログインする
def log_in_as(user, password: ‘password’, remember_me: ‘1’)
post login_path, params: { session: { email: user.email,
password: pa

元記事を表示

railsチュートリアル第9章 [Remember me]チェックボックス

##[Remember me]チェックボックス
[remember me]チェックボックスでログインを保持する方法を解説

####[remember me]チェックボックスをログインフォームに追加する
app/views/sessions/new.html.erb

“`html
<% provide(:title, "Log in") %>

Log in

<%= form_with(url: login_path, scope: :session, local: true) do |f| %>

<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>

<%= f.label :password %>

元記事を表示

サービス設計について③!

#①.結論!

Ruby on Railsでは、DB設計が済んでしまえばマイグレーションファイルなどに記述をするだけでDBが利用可能になるので、より開発に近い設計だと言えます!

したがって、DB設計は詳細設計に分類されることがほとんどです!

DB設計について説明したいと思います!

#②.DB設計

DB設計とは、開発で使用するDB(データベース)の表を設計することです!

具体的に考える項目としては、「テーブル」や「カラム」、「関連付け(アソシエーション)」などです!

設計手順としては、まず保存する項目を洗い出します!

そして、どのようなテーブルがあれば管理しやすいかを考慮しつつ、その中でテーブル同士の関連付けを考えていきます!

#③.エンティティ

サービスで扱われる情報を整理します!

サービスで扱われる情報のことを、「エンティティ」と呼びます!

サービスで扱われるデータ自体のことですね!

例を出すと、以下のような物です!

・ユーザー管理に関する情報

・投稿へのコメントに関する情報

このような物になります!

次に、抽出したエンティティを関連性も含め具体化し

元記事を表示

幹事をランダムに設定する

#前回投稿した記事の応用編

https://qiita.com/tkht2401/items/63406354e17566e3ae11

sampleメソッドを使って、より応用したBooleanの「true, false」を切り替えたいと思います。

**この記事が少しでも良かったと思ったらLGTMを押していただけたら嬉しいです!!**

##前提条件

group:memberrをたくさん持つ
member :たくさんのgroupに所属する
group_member : 中間テーブル

**グループとメンバーは多対多の関係です!**
そして、グループに加入したメンバーの中からランダムに幹事を設定できること。

流れとしては、
自動設定するを押すとグループに参加のメンバーの中から、
Role(役割)が、organizer(幹事)かregularにランダムに変わります。

今回はsampleメソッドを使うので、少し制限もつけます。
①幹事は一グループにつき一人まで
②メンバーは二回連続で幹事にならない

#イメージ図
![qiita_boolean.png](https://qii

元記事を表示

投稿に対する空コメントでInvalid dateが出たときの対処法

##目的
自作アプリで投稿にコメントができる機能を作成。
その際出てくるエラーの解決に時間がかかったので、解決までの考え方を備忘録として記事にしました。

##環境
windows10 home
Ubuntu 20.04.1 on WSL2
rails 6.0.3
ruby 2.6.6

##起きた現象
空のコメントを送信するとInvalid dateエラーが発生。
![eae5c07bf8195a5b11daa98e2106ada6](https://user-images.githubusercontent.com/69103382/138587293-696191b6-0d70-4411-96e9-b9912330c119.png)

**コメントモデルのカラムは以下に記載**

* id
* content(コメントの中身)
* user_id(外部キー)
* micropost_id(外部キー)
* created_at
* updated_at

##①ビューを確認

“`microposts/show.html.erb
<% @comments.each do

元記事を表示

RedmineをDocker+NGINX+WSL2上で動かす

# はじめに

Redmine をローカル環境で動かしたいと思い、せっかくなので Docker で構築することにします
また、公式 Redmine を `git pull` するだけで最新にしたかったので、Redmine のひとつ上のディレクトリに `docker-compose.yml` 等を配置することにします

# バージョン

– docker desktop
– 4.1.1
– Windows 11 Pro
– 21H2
– Ubuntu
– 20.04.2 LTS
– Redmine
– 4.2.3.devel
– Ruby
– 2.7.4-p191 (2021-07-07) \[x86_64-linux\]
– Rails
– 6.1.4.1

# 前提

– Docker で WSL2 の設定が済んでいること

環境は Docker + NGINX + WSL2 とします
今回紹介するソースは、以下のリポジトリにあります

# 手順

## 1

元記事を表示

【Rails】N+1問題についてまとめた [includesメソッド]

#N+1問題とは何か

>ループ処理の中で都度SQLを発行してしまい、大量のSQLが発行されてパフォーマンスが低下してしまう問題のことです。
>日常生活で例えるなら、スーパーで商品を1点ずつお会計するようなもの。
それだけ無駄なことを行なっている状態を指します。

https://qiita.com/massaaaaan/items/4eb770f20e636f7a1361

簡単にいうと、
DBからデータを取り出す際に大量のSQLが実行されてパフォーマンスが低下してしまう問題。

**なぜ大量にSQLが実行されてしまうのか?**
テーブル間にアソシエーションが組まれているため。

##解決方法

>N + 1クエリ問題を解決する

>Active Recordは、読み込まれるすべての関連付けを事前に指定することができます。これは、Model.find呼び出しでincludesを指定することで実現できます。includesを指定すると、Active Recordは指定されたすべての関連付けが最小限のクエリ回数で読み込まれるようにしてくれます。

https://railsguides

元記事を表示

【Rails】faker gem を使用してseed.rbにダミーデータを作成する

#概要
**faker gem**を使用して、ダミーデータを作成し、**seed.rb**を使用してDBに反映させる

#方法

**faker gem**を使用する

### faker gemでできること
文字列をランダムに作成してくれる

“`:ターミナル
irb(main):001:0> Faker::Name.first_name
=> “蒼”
irb(main):002:0> Faker::Name.last_name
=> “藤田”
irb(main):003:0> Faker::Internet.email
=> “lakia@emmerich.info”
“`

https://github.com/faker-ruby/faker

### インストールしたらseed.rbにデータを追加していく

`前提`
userモデルとboardモデルは **1対n**の関係になっている

“`ruby:モデル
class User < ApplicationRecord authenticates_with_sorcery! has_many :boards,

元記事を表示

【Rails】I18nで日時のフォーマットを指定する方法

#概要
I18nを使用して、日時のフォーマットを表示したい

#方法

#日本時間に設定する

“`ruby:config/application.rb
config.time_zone = ‘Tokyo’
config.active_record.default_timezone = :local
“`

### 一文ずつ理解していく
東京にタイムゾーンを設定する

“`
config.time_zone = ‘Tokyo’
“`

>アプリケーションやアクティブレコードで使用するデフォルトのタイムゾーンの設定

https://railsdoc.com/page/config_time_zone

“`
config.active_record.default_timezone = :local
“`

>データベースの処理の際に使うタイムゾーンを指定
「:utc」を設定すると、データベースに保存したりする時刻がUTC
デフォルトでは、「:local」

https://railsdoc.com/page/config_active_record_default_

元記事を表示

rails内(簡易チャットアプリ)でjavascriptを使った際にエラーが出た時の対処フロウ【自分用】

## 簡易チャットアプリ(rails)で起こったJSのエラー
[![Image from Gyazo](https://i.gyazo.com/0d188d6f1414f78de448c78264cc0fb9.gif)](https://gyazo.com/0d188d6f1414f78de448c78264cc0fb9)
①非同期通信でメッセージを送信すると、current_userの名前が「undefined」になる。
②imageがnullの時、ビューに表示されないための条件式(三項演算子)を以下のように書いたにも関わらず、imageが表示されてしまう。

~~~message.js
function buildHTML(message) {
var image = message.image ? `` : “”;

var html = `

【Rails】Sorcery gem [require_login] [not_authenticated]について

# 概要
・sorcery require_loginについてまとめる

#目標
・ログインしていないユーザーが掲示板一覧ページにアクセスした場合、flashメッセージを表示しログイン画面に遷移するようにしたい。

# require_login
Sorceryが作成するメソッド。
ログインしていないユーザーをアクション単位で弾き、**not_authenticated**メソッドを発火する。
> アクセスしようとしたURLをセッションに格納し、not_authenticatedを実行するメソッド。

https://qiita.com/aiandrox/items/65317517954d8d44d957#require_login

# not_authenticated
Sorceryが作成するメソッド。
**require_login**メソッド内で実行される。
デフォルトでは`redirect_to root_path`が定義されている。
自分で変更したい際には、**application_controller.rb**で記述する。

# require_loginとnot_

元記事を表示

[Rails] current_user.idとは

##初めに
####なぜこの記事を書きたかったのか
**このidはどこから来たのか知りたかったから、深堀りしたい。**

####環境
**・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2**

####記事の目次
**1)どこから来た?**
**2)どんな機能があるの?**
**3)どういうときに使うの?**
**4)最後に**

##どこから来た?
####アプリケーションへ遷移するとき、自動的に付与される。

##どんな機能があるの?
**今現在、アプリケーション内を操作しているユーザーを識別するためにパソコンが自動的に付与させる。**
**イメージはアプリケーション内に入るユーザーにクリアファイルを強制的に渡してくれる。アプリケーション内にデータを保存したときそのファイルの中に入れることができる。**

##どういうときに使うの?
**付与されているIDを使って遷移先の制限や行動

元記事を表示

rails migrate リセット(reset)できない Windows SQLite3

# エラー
Windowsでsqlite3をつかってると、migrateのリセットができない

“`
rails db:migrate:reset
# →エラー
“`

# 解決法
コードエディターで`db/development.sqlit3`を削除

“`
rails db:create db:migrate
“`

以上でデータベースが作り直される

元記事を表示

deviseユーザー情報をパスワードなしで更新するとき詰まった話

今回 deviseでログイン機能を作った際、
プロフィール編集をパスワード入力しなくても更新できるように実装したく
詰まった所を簡潔にお伝えしたいと思います!!

最初の仕様としましてはパスワードを入力しないとプロフィールを変更できない状態でした、
ですが本来であれば更新するためのパスワード1箇所入れれば更新できるはず….

大体のアプリケーションには
新規のパスワード、変更確認用、プロフィールを更新するためのパスワードがあるかと思います。

でもなぜかその3つを入れないと入力が不足していますとエラーが出る状態でした。

この仕様は本当に不便ということでパスワードを更新用のみいれればプロフィールを変更できる仕様に変えましたのでそのコードを紹介します!!

“`models/user.rb

def update_without_current_password(params, *options)
if params[:password].blank? && params[:password_confirmation].blank?
params.de

元記事を表示

Refile::InvalidID エラーが起きた時のメモ

## 環境
“`
gem “refile”, require: “refile/rails”, github: ‘manfe/refile’
gem “refile-mini_magick”

Rails 5.2.6
“`

## 1.目標
**Refileの`attachment_image_tag`命令でクラウド上の画像を表示したい。**

## 2.状況
– `attachment_field`フォームで保存した画像を`attachment_image_tag`命令で呼び出そうとしたところ、`Refile::InvalidID in (該当頁)`エラーが発生した。
– マイグレーションファイルに`default: “default.jpg”`等のようなデフォルト値を指定するコードはなかった。(※ https://teratail.com/questions/220379 で、デフォルト値に起因する同挙動エラーの解決報告あり)
– 該当レコードを保存した際にはフォーム・ストロングパラメータ・モデル全てに不手際があった。
– 不手際修正後に作成したレコードを`attachment

元記事を表示

サービス設計について②!

#①.結論!

設計の手順には明確な定義がないため、一般的な「要件定義」→「基本設計」→「詳細設計」の順で説明します!

進むごとに開発しやすいような細かい箇所を決定していくようなイメージです!

ここから前回の続きです!

今回は、「基本設計」と「詳細設計」に着目して進めます!

#②.基本設計

要件定義の内容を、開発に必要な内容へまとめることです!

外部設計とも呼ばれます!

今回の基本設計では、アプリケーション制作に必須の要素となる「画面」や「画面遷移の流れ」をまとめていきます!

#③.詳細設計

実際に書くべきコードを洗い出す作業です!

要件定義や基本設計の情報を元に、ユーザーが行う操作(ボタンを押す、フォームを投稿するなど)に対して行われる処理をすべて書き出します!

その上で、実際どのようなコードを書くかを当てはめていきます!

Ruby on Railsであれば「ルーティングはどういったものがあるか、対応するコントローラーとそのアクションはどういったものになるか、モデルは ~」といった内容を表にまとめると良いでしょう!

#④.画面遷移図

アプリの画面がどのよう

元記事を表示

OTHERカテゴリの最新記事