Ruby関連のことを調べてみた2022年01月14日

Ruby関連のことを調べてみた2022年01月14日

【2022年最新】Rails6にBootstrap5を導入する方法

※ 本記事はRails6でBootstrap5を導入したい方向けの記事です!
※ Rails5やBootstrap4など、バージョン違いのものを導入する場合とは手順が異なります!

## 開発環境&前提条件
Ruby 3.0.2
Rails 6.1.4.4
導入したBootstrap 5.1.3
Rails6でrails newしてある状態

## Bootstrap5のインストール
“`terminal:terminal
% yarn add bootstrap
“`
上記コマンドでBootstrapの最新バージョンがインストールされます!
バージョンを指定する場合?

“`terminal:terminal
% yarn add bootstrap@バージョン番号
“`

ドロップダウンなどのポップアップ要素をいい感じにしてくれるpopper.jsもインストールします!

“`terminal:terminal
% yarn add @popperjs/core
“`

## application.html.erbに追記
“`erb:app/v

元記事を表示

assertEqualsやassert_equalの引数はなぜ expected, actual の順なのか、調べてみた

## はじめに

xUnit系のテスティングフレームワークでは、2つの値が等しいことを検証するメソッド(`assertEquals`や`assert_equal`など)の引数が expected, actual(期待する値、実際の値)の順に並びます。

“`java
// Java (JUnit)
assertEquals(2, calculator.add(1, 1));
“`

“`ruby
# Ruby (minitest または test-unit)
assert_equal(2, calculator.add(1, 1))
“`

しかし、この引数の順番は直感に反するので、逆に書きたい、と思う人も中にはおられるようです(というか、僕も昔そう思っていました)。

“`java
// actual、expectedの順がいい!
assertEquals(calculator.add(1, 1), 2);
“`

“`ruby
# actual、expectedの順がいい!
assert_equal(calculator.add(1, 1), 2)
“`

元記事を表示

GraphQL RubyのDataloaderを使ってみる

GraphQL Rubyを使っているときにSQLのN+1問題を解決するためにバッチロードを利用すると思います。
有名なgemとしては [GraphQL::Batch](https://github.com/Shopify/graphql-batch) や [BatchLoader](https://github.com/exAspArk/batch-loader)、 [Dataloader](https://github.com/sheerun/dataloader)などがあります。
個人的には使ったことがあるのは[Dataloader](https://github.com/sheerun/dataloader)なのですが、2018年から更新されていないようなのと、去年GraphQL Ruby自体にDataloaderが入ったので今回はこちらを触ってみました。

## GraphQL::Dataloader の概要

ドキュメントはこちらです。

https://graphql-ruby.org/dataloader/overview.html

GraphQL::Dataload

元記事を表示

【Rails】ツイートを作成順ではなく、いいねした順に表示したい

# 概要
ツイート投稿機能とツイートへのいいね機能を持つアプリケーションを開発中、
いいねした順番にツイートを取得する方法について調べたのでメモ。

## 環境
ruby 3.0.2
rails 6.1.4
mysql 8.0.26

## やりたいこと
**ツイートの作成順**がデフォルトの時に、
**ツイートの作成順**ではなく**ユーザーがいいねした順**にツイートを取得したい。

## 先に結論
reorderを使用し、中間テーブルのカラムを直接指定する

“`ruby:users_controller.rb
# ユーザー詳細画面で表示したい場合
def show
@user = User.find(params[:id])
@favorites = @user.favorite_tweets.reorder(‘favorites.created_at DESC’)
end
“`

以下、詳細

### 関連するモデル

“`ruby:user.rb
class User < ApplicationRecord has_many :tweet

元記事を表示

確認ダイアログをBootstrapで見栄え良くする

## 前提
・CRUD処理の実装はOK
・Bootstorapが導入済みである

## 開発環境
Ruby2.6.3
Rails5.2.5
Bootstrap4

## 目標
“`ruby:
# 前後の記述は省略
<%= link_to "削除", post_path(post), method: :delete, data: { confirm: "削除しますか?" } %>
“`
上記のように記述した時に出る削除確認ダイアログ

![スクリーンショット 2021-11-29 17.39.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309590/fd94f2ad-d76f-983c-529b-ac59e2454876.png)

これだとちょっと味気ないので

![スクリーンショット 2021-11-29 17.50.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309590/56e022be-6

元記事を表示

gem installに失敗してた原因と解決方法

# 環境
– MacBook Pro (16-inch, 2019)
– macOS Big Sur 11.6.2
– Xcode13.2
– ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin20]
– rbenv 1.2.0のインストール済み(参考:[rbenvでrubyのバージョンを管理する – Qiita](https://qiita.com/hujuu/items/3d600f2b2384c145ad12))

# 発生していたこと①
`gem install jazzy` をすると、パーミッションエラー
> ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.

## 原因
gemのインストールはsudo付けない方が良い(が過去につけたせいで持ち主が管理

元記事を表示

[Rails]未経験独学が読書を習慣化できるアプリを制作しました

# 1. はじめに
**本記事を閲覧いただきありがとうございます!**
**私は現在、バックエンドエンジニアへの転職を目指して学習をしています。学んだことを活かし、Rails にてWebアプリを制作しましたので、概要や工夫した点などを記事にまとめてみました。**

# 2. アプリ概要
## ? BookDaily
**「 読書 × 習慣化 」**
読書を習慣化できるサービスです。
読む本を登録すると、毎日何ページまで読むかの目標が設定され、読書の進捗を管理することができます。

– **毎日何ページまで読めばいいのか、目標がひと目で確認できます!**
– 読む本を登録 -> 読み終わる日を設定 -> 毎日の目標が設定
– **日々の読んだページ数の記録も簡単にできます。**
![movie.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/882861/b5dd5a7c-4597-ee08-2fce-fe759d634bef.gif)

– **進捗や達成率をわかりやすく表示し、モチベーションを

元記事を表示

【Rails】scopeメソッドとクラスメソッドでnilを返す時の挙動が違う

##クラスメソッドの場合

“`ruby
class Book
def self.published
where(published: true)
end
end

Book.published.order(id: :desc)
#=> Attendance Load (3.8ms) SELECT `attendances`.* FROM `attendances` WHERE `attendances`.`date` BETWEEN ‘2022-01-01’ AND ‘2022-01-31′ ORDER BY `attendances`.`id` DESC
“`

nilの場合はnilが返るのでメソッドチェーンが使えない。

“`ruby
class Book
def self.published
nil
end
end

Book.published
#=> nil

Book.published.order(id: :desc)
#=> NoMethodError: undefined method `order’ for nil:Ni

元記事を表示

[py2rb] 辞書 の四則演算

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# Dict (Python)
辞書の四則演算が必要らしいのですが、辞書を継承してメソッドを追加しているみたいです。
# Hash (Ruby)
“`ruby
class H < Hash def initialize self.default = 0 end def +(other) case other when Hash other.each do |k, v| self[k] += v end when Integer || Float self.each do |k, _| self[k] += other end end end def *(other) case other when Hash other.each do |k, v| self[k] *= v end whe

元記事を表示

[rails]評価点ごと(星ごと)の一覧画面を実装

#はじめに
ポートフォリオ作成中に、評価された商品について、評価点ごとに商品を表示する機能を実装しようと試みました。
その際、ちょうどいい記事が見つからなかったので今回まとめてみました。

##開発環境
ruby ‘3.0.0’
Rails 6.0.3.4

#前提
下のような、評価をするためのモデル及びカラムが作成されており、投稿機能まで実装されているものとする。
ユーザが”ガジェット”を投稿するサイトにて、下のようなER図にてgadjet_pointを今回の評価点とする。
![gadjet_table.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1874224/38d39f7b-7d49-2a9a-dd5b-967e23771294.png)

今回は、下画像のように10段階評価されたものについて、点数ごとの一覧画面を作成することを目標とする.

![スクリーンショット 2022-01-13 14.51.30.png](https://qiita-image-store.s3.ap-north

元記事を表示

通称〇〇本まとめ

ツイッターやサイトで見かける「通称〇〇本」が気になって調べてみました。しかし、まとめられているところを探しきれなかったので自分が見かけたものだけ載せてます。

#カピバラ本
#HTML #CSS #Webデザイン #入門

https://www.shoeisha.co.jp/book/detail/9784798170114

[Web制作者にかなりオススメの解説書! HTMLとCSSの今のテクニックを基本からしっかり学べるカピバラ本](https://coliss.com/articles/book-review/isbn-9784798170114.html)

#徳丸本
#Webアプリケーション #Webセキュリティ

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版

#浅居本
#Docker #Docker Compose #入門

http://www.kohgakusha.co.jp/books/detail/978-4-7775-2147-0

#チェリー本
#Ruby #入門

https://gihyo.jp/book/2021/97

元記事を表示

[Ruby]downcaseとsliceメソッドの併用

学習したことのアウトプットとして

メソッドの引数に、任意の2つの文字列を指定し、引数に指定された2つの文字列のうち、どちらかがもう一方の文字列の末尾にある場合はTrueを、満たせていない場合はFalseを出力するend_otherメソッドを実装する。
この時、入力された文字が大文字でも小文字でも、同一の文字として処理を行う。
 
例えば、”abc”と”HiAbc”の文字列を引数とした場合、”HiAbc”の末尾に”abc”という文字が存在しているのでTrueと出力される。

## 使用するメソッド
### downcase
大文字を小文字に変換するメソッド

“`zsh
# 大文字を含んだ文字列を定義
irb(main):001:0> name = “Hiabc”
=> “Hiabc”

# downcaseメソッドを使用し、小文字に変換
irb(main):002:0> name.downcase
=> “hiabc”
“`

### slice
文字列から指定した要素を取り出すことができるメソッド
`負の数を指定すると末尾からカウントしてくれる`
こちらでもう少し詳しく記事にし

元記事を表示

[py2rb] 仮引数の既定値

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 仮引数 (Python)
“`python
def func(a, b=1, c=2, **kwargs):
print(a, b, c)

func(0, 4, 5)
func(0, d=4, c=5)

# 0 4 5
# 0 1 5
“`
`d=4`が実引数の2番目にありますが、辞書扱いとなり仮引数の2番目の`b`には格納されないようです。

独習Python 330p

https://www.shoeisha.co.jp/book/detail/9784798163642
# 仮引数 失敗 (Ruby)
“`ruby
def func(a, b=1, c=2, **kwargs)
p [a, b, c]
end

func(0, 4, 5)
func(0, d=4, c=5)

# [0, 4, 5]
# [0, 4, 5]
“`
`d=4`の戻り値である`4`が`b`に格納されます。
# 仮引数 成功 (Ruby)
“`ruby
def func(a,

元記事を表示

【Ruby】if → unlessへの書き換え unlessメソッド

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
次のif文をunlessというメソッドを用いて書き換えてください。

“`ruby
if a + b > 0
puts “計算結果は0より大きいです”
end
“`
**ヒント**
**unless**
unlessとはifとは逆で、条件式がfalseの場合に処理が実行されます。

**ifを使用した場合**

“`csharp
if 条件式
条件式がtrueの時に実行する処理
else
条件式がfalseの時に実行する処理
end
“`

**unlessを使用した場合**

“`csharp
unless 条件式
条件式がfalseの時に実行する処理
else
条件式がtrueの時に実行する処理
end
“`

##解答##

“`ruby
unless a + b <= 0 puts "計算結果は0より大きいです" end ``` ##解説## まず問題のコードについて解説を行います。**a + b > 0**という式は、

元記事を表示

RailsのViewの役割とRoutingについて

## はじめに
基本は備忘録
MVCについて役割ごとにまとめる機会があったので整理します。

## View
htmlファイル 拡張子がsample.html.erb

## 新しいページを作成する
(新たなコントローラとviewを作成 + routingの設定)

“`rb
# localhost:3000/home/topにアクセス可能
# 同じ名前のコントローラがすでにある場合コマンドが使えない
rails generate controller コントローラ名 アクション名

rails g controller posts index
“`

## link_to
aタグに変換する。

“`rb
# Prefixで設定
# rails routesでPrefixを確認
<%= link_to("文字列", post_path) %>
“`

“`rb
# urlで指定
# /で始める routingに合わせる
# postのroutingの時は{method: “post”}
<%= link_to("文字列", "/posts") %>
“`

## パーシャル

元記事を表示

RailsのControllerの役割

## はじめに
基本は備忘録
MVCについて役割ごとにまとめる機会があったので整理します。

## Controller
*ModelやViewとdateのやりとりをする*

## CRUD(クラッド)処理
システムに必要な4つの主機能

“`rb
C Create # データの作成
R Read # データの読み込み
U Update # データの更新
D Delete # データの削除
“`

*railsは7つを推奨している*

“`rb
index # データの一覧を表示する
new # データを新規作成するためのフォームを表示
create # データを新規作成し、データーベースへ保存

show # 指定したデータを表示
edit # データを更新するためのフォームを表示
update # データ更新

destroy # データ削除
“`

**一覧データの表示と作成**
**index**

“`rb
# DBから全てのデータ(@posts)を取得しViewに返却
#.order(created_at: :desc)で並び替え
@posts = Po

元記事を表示

RailsのModelの役割

## はじめに
基本は備忘録
MVCについて役割ごとにまとめる機会があったので整理します。

## Model
modelの役割はDB関連の処理
*date取得などの処理や、date自体の作成・削除*

## 新しいテーブルを作成
*モデル・マイグレーションファイルが作成される*
`db/migrate/`配下にmigrationファイル
`app/models/`配下にモデル

“`rb
# DBに変更を指示するmygration fileを作成
# カラムが複数個ある場合は,は不要 name:string mal:string
rails generate model Post content:text

# DBに変更を反映 id, created_at, updated_at, は自動生成
rails db:migrate

“`

“`rb
# データ型
integer 整数
float 少数
string 文字列
text 長い文字列
boolean 真偽値
“`

## 既存のtableにカラムを追加する
`db/migrate`配下

“`rb

元記事を表示

[Ruby on Rails]いいね、お気に入り機能の実装

#はじめに
お気に入り機能を実装する際に迷うことがあったため、アウトプットもかねて自分なりにまとめてみました。

#前提
下のようなER図にて、お気に入り機能を実装する。
すでに、userの新規登録及びgadjetの投稿、一覧画面、詳細画面の実装は済んでいる。
![ER.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1874224/fec7a921-6e3a-dc1b-79e3-7c8aee6097d8.png)

・Userはgadjetに対して、一つのお気に入りをすることができる
・Userとfavoriteは”1対多”の関係
・gadjetとfavoriteは”1対多”の関係

##開発環境
ruby ‘3.0.0’
Rails 6.0.3.4

#実装手順

##favoriteモデルの作成

上記ER図のように、モデルを作成する。

“`:ターミナル
rails g model favorite user_id:integer gadjet_id:integer
“`
マイグレーシ

元記事を表示

【Ruby】今日の曜日を表示するコード Dateクラス

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
今日の曜日を表示するコードをDateクラスを使用して記述してください。

ただし、金曜日だった場合だけ以下のように表示の内容を変えてください。

(出力内容)
「今日は水曜日」
「今日は金曜日だ !!!」

ヒント
**Dateクラス**
DateクラスとはRubyの標準ライブラリの機能です。Dateクラスを使うには以下一文を記述します。

“`ruby
require “date”
“`
次に、Dateクラスを用いて「今日の曜日」を取得する場合は以下のように記述します。

“`ruby
Date.today.wday
“`
wdayは曜日を0(日曜日)から6(土曜日)の整数で取得することができるDateクラスに用意されているメソッドです。
たとえば、以下のように使うことができます。

“`ruby
require “date”

day = Date.today.wday

puts day
“`

これを実行すると、曜日に合わせた数字が出力されます。た

元記事を表示

[Ruby]条件式付きの繰り返し処理(while文)

学習したことのアウトプットとして

# while文
繰り返し処理を行うためのRubyの構文で、指定した条件が真である間処理を繰り返す
 
基本構文

“`ruby
while 条件式 do # doは省略可
# 条件が真である時に繰り返す処理
end
“`

例)1〜10までの数字を出力させる

“`ruby
num = 0

while num <= 10 puts num num += 1 end # ターミナル出力結果 # 0 # 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10 ``` ### 無限ループに注意! 例えば上記のコードの条件式を「true」にすると無限にターミナルに出力されて、コンピュータに大きな負担がかかってしまうので注意が必要 ### breakを使ってループを抜け出す ```ruby:例 number = 0 while number <= 10 if number == 5 break end puts number number += 1 end # ターミナル出力結果 # 0

元記事を表示

OTHERカテゴリの最新記事