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

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

Ruby問題 特定の数字を検知するプログラムの実装

# はじめに
プログラミングスクールでRubyの問題を毎日解いています。
これから平日は毎日何かしらアウトプットのため投稿を続ける予定です。
今回は特定の数字が存在するかどうかを判定するプログラムをinclude?メソッドを使用して実装していきます。

# 問題
以下の要件を満たすarray123メソッドを実装。

・配列内に1,2,3が全て入っている場合は、「True」と出力する
・配列内に1,2,3の全てが入っていない場合は、「False」と出力する

“`Ruby:雛形
def array123(nums)
# 処理を記述
end

# 呼び出し例
array123([1, 1, 2, 3, 1])
“`
include?メソッドについて
[Ruby 3.1 リファレンスマニュアルinstance method String#include?](https://docs.ruby-lang.org/ja/latest/method/String/i/include=3f.html)
[Ruby 3.1 リファレンスマニュアルinstance method Array#in

元記事を表示

rubyにおけるcount,size,lengthメソッドの違い

結論からいうと、配列、ハッシュ、文字列によって異なります。
## 配列のとき
ある条件を満たす要素数を知りたいとき→**count**
単に配列の要素数を知りたいとき→**length, size**countも使える

## ハッシュのとき
ある条件を満たすkeyとvalueの要素数を知りたいとき→**count**
単にKeyとvalueの要素数を知りたいとき→**length, size**countも使える

## 文字列のとき
ある条件を満たす要素数を知りたいとき→**count**
単に文字数をしりたいとき→**length, size**countは使えないです

この結論をもとに話を進めていきます。

## lengthとsize
先ほどの説明からも分かる通り、同じメソッドなんです。やってることが同じです。
実際にコードを打っても同じ結果が返ってきます。

## count
countは文字列以外を除いては、lengthとsizeと同じ働きをします。書き方に多少の差はありますが、同じ動きをしてくれます。
では何が違うのか?length/sizeとcountだと処理速度が

元記事を表示

ridgepoleを導入したのに、” Migrations are pendding “とはドユコト? のときに見る記事

# はじめに

今更ながらrailsアプリケーションに**ridgepole**を導入してみました。

その際に`rails migrate`とは別れたはずなのですが、railsのエラー画面で`”Migrations are pendding”`というmigrationファイルと付き合っていたころの見慣れたエラーに出くわしてしまいました。

別れた次の日にばったりいつもの公園で出会ってしまったカップルのように・・・

どうやら復縁を迫られているみたいです。

そこで、そんな人がそんなときに見る用の記事(migrationと未練を残さずお別れする方法)として、やったことをまとめました。

「そもそも**ridgepole**とはなんぞ?」

という方は、偉大な先人たちがたくさん知恵を残してくれているのでそちらをご参照ください!
(導入まで簡単にできます)

https://qiita.com/piggydev/items/12885fed7135e0443ad5

https://re-engines.com/2017/05/03/370/

# 原因調査
## 1. railsの見て

元記事を表示

limitとoffsetについて

activerecordはrailsを使う際にはよく使われるとおもいますが、コマンドを打ったりコードを書いたりする際にlimitとoffsetをちゃんと知らんかったのでまとめようとおもいます。

## limit
これは名前から分かるかもしれませんね。
引数に数値を渡すことで、指定したレコード数を取得できます。
例えば、
“`
User.limit(2)
# 最初のレコードから2件レコードを獲得される
“`

## offset
これは、特定の位置からそれ以降のレコード数を取得できるメソッドです。
“`
User.offset(3)
# 最初から3件目のレコードから最後までのレコードを獲得する
“`

最後にこの2つを合わせた書き方があるんです。

## 途中から指定した件数を取得
以下のようなコードになります。
“`
User.limit(3).offset(7)
# 最初から7番目のレコードから3件値を取得する
“`
次回は、link_toのソースコードをアウトプットしようと思っていますので重めの内容になるかと思います
以上です。何か間違いがございましたら、ご教示いただ

元記事を表示

references型

# references型って?
自動的にインデックスと外部キー参照付きのカラムが追加され既存のモデルと生成したモデルを関連付けする下準備をしてくれる。
つまり、既存のテーブルを参照して必要なカラムを自動的に追加して新しいテーブルを作成すること。
*すべてのデータベースで使えるわけではない。

#### 例)

Micropostモデルを作成

“`
# userテーブルに紐付けて、Micropostテーブルを作成
$ rails generate model Micropost content:text user:references
“`

自動生成されたMicropostモデル

“`rb:micropost.rb
class Micropost < ApplicationRecord # belongs_toメソッドでuserモデルに紐付いている(自動的に記述してくれてある) belongs_to :user end ``` Micropostのマイグレーション ```rb:[timestamp]_create_microposts.rb class Crea

元記事を表示

Bootstrap【導入方法】

## Bootstrapの導入方法

RailsにはCSSのデザインテンプレートがありません。
Bootstrapを用いることで、デザインが簡単に整えられます。

導入方法の種類が何個かあります。
– CDNの導入
– ファイルを配置する
– yarnでインストール
– gemでインストール

今回はyarnを用いて導入していきます。

### Bootstrap導入手順

下記コマンドを実行します。
“`
$ yarn add jquery bootstrap@4.5 popper.js
“`
その後に、config/webpack/enviroment.jsを編集します。
下記を記述します。

“`config/webpack/enviroment.js
:
:
const webpack = require(‘wabpack’)
environment.plugins.prepend(
‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery/src/jquery’,
jQuery: ‘jquery/src/j

元記事を表示

Nuxt.jsとRailsでゲストログイン機能を作る

## 概要
今回ポートフォリオを作成した際に実装したゲストログイン機能を紹介したいと思います。

## 実装した経緯
転職活動でポートフォリオを見てもらう際に、ゲストログイン機能があったほうがいいと考え実装しました。
ポートフォリオを見てもらう際に、ログインしないと各機能が使えない仕様では閲覧する採用者の方の負担が増えてしまいます。
その結果せっかく作成したポートフォリオを見てもらえないなんてことも起こる可能性があります。
なので **ログインしなくても使用できるアプリーケーション設計**、もしくは**簡単にログインできる機能**を付ける必要があると思い実装しました。

## 環境
|/|バーション|
|:–:|:–:|
|ruby|3.0.3|
|rails|6.1.4|
|nuxt|2.15.8|
|vuetify|2.6.1|

## 前提
今回はフロントエンドをNuxt.js、バックエンドのAPIとしてRailsを使用したSPA開発を前提としています。

## ゲストログインの方式
ゲストログイン機能を実装する場合、下記の2種類の方法があります(初心者の私が思いつく限り)。

元記事を表示

[初学者向け]Fontawesomeが表示できない時の解決策

## 概要
初学者の私が経験した、Fontawesomeが表示できない時の解決策を3パターン紹介します。
この記事は、「なんだ、そんなことか」となる内容ですが、右も左も分からない当時の私にとっては、とても大きな壁に見えたので、共有します。

## 目次(結論)
**<パターン1>**
・閲覧しているバージョンが違う。

**<パターン2>**
・有料アイコンを導入しようとしている。

**<パターン3>**
・CSSの記述漏れ。

## 開発環境
・Cloud9
・Ruby
・Ruby on Rails
・使用gem: font-awesome-sass,’~> 5.15.1′

## <パターン1>閲覧しているバージョンが違う。
##### 説明
「閲覧しているバージョン」とは、Fontawesomeの[公式サイト](https://fontawesome.com/v5/search)で実際に検索しているバージョンのこと。
検索しているバージョンと、使用しているgemが異なる場合、アイコンのクラス名が違い、正しく表示されなくなります。
“`html:バージョンによるHTML記述の違

元記事を表示

uninitialized constant FactoryBotのエラーが出た時の話

出たエラーは下記

“`
1) User ユーザー新規登録 内容に問題ない場合 すべての値が正しく入力されていれば保存できること
Failure/Error: @user = FactoryBot.build(:user)

NameError:
uninitialized constant FactoryBot
# ./spec/models/user_spec.rb:6:in `block (3 levels) in
“`

# 確認箇所
・FactoryBotの記述内容
・user_spec.rbの記述内容

上記確認しても誤字は見当たらない

uninitialized constant
⇨翻訳すると”未初期化の定数”
ということは、、、

Gemfileを見ると下記のように記述していました。。。
“`Ruby:Gemfile
group :development do
# Access an interactive console on exception pages or

元記事を表示

UberEats風SPAチュートリアルの復習メモ:1章

https://www.techpit.jp/courses/138
Reactの基礎になれるためにこちらの教材をやってみました。
以下、要点確認用のメモです。


# 1章 要件定義

# 1-1 構成

– 店舗一覧(/restaurants)
– レストランを一覧表示
– レストラン1をクリックするとレストラン1の商品一覧ページ(/restaurant/1/foods)に遷移
– 商品一覧(/restaurants/{id}/foods
– 販売してる商品を一覧表示
– 商品をクリックすると仮注文のモーダルが表示される
– 仮注文モーダル
– 数量の+-ボタン
– 数量に応じて金額を計算して表示
– 最初から購入数を選べるようにする(+-何回も押さなくて良いように)
– 注文確認画面
– 仮注文した複数商品の合計金額+配送料を計算、表示
– 注文確定のボタン

例外パターン

複数の店舗で仮注文しようとする可能性

解決策⇨別店舗で注文するかどうか確認するモーダルを表示する

– 店舗Aの仮注文がある

元記事を表示

【個人開発】フードデリバリー配達員の情報交換サイトを作りました。

# サービスの概要
【サイト名】
Fodeli Online

https://fodelionline.site/

![スクリーンショット 0004-02-24 4.27.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1794066/80a8464a-0909-adfe-eb2d-8039be9f72fb.png)

【コンセプト】
フードデリバリー配達員の情報交換や交流を目的としたサービス

【サービスの開発に至るまでの背景】
私自身、2社フードデリバリーで働いていた経験があり、出来高制ということもあり、注文が来なくて稼げない時期がありました。
一般的な会社だったら上司に仕事のコツを教えて貰えたりすると思いますが、完全個人のこの仕事では基本的には自分でコツを見つけていくしかありません。
そんな中で、配達員同士がもっと気軽に情報交換ができるサービスがあったらいいなと考え、このサービスを開発することにしました。

# アプリケーションの機能

ユーザー登録機能
 ■ ログイン機能
 ■ ログ

元記事を表示

Rails list値の差分比較

## TL;DR

list – listで差分がでる

## なぜ、Rails list値の差分比較を書くことになったか

2つのケースで利用した

### 1. WebClient -> RailsAPI -> 外部APIの時のvalidationで利用

現状の実装でRailsApiServerから外部のAPIを叩く実装があり、外部APIもまだvalidation条件がふわっとしていたため、ApiServer側でvalidationを担保しようと思っての実装(Model継承してService層ににがしているので、あまり本質的じゃない)。

### 2. RSpecのresponse bodyの情報チェックの時に利用した

あまりないケースだが、credential情報をちゃんと消しているかなどの簡易チェックに結構有用だった。
また、ResponseBodyの型情報あっております!!って時のチェックでも利用した。

## 例

“`sample.rb
list_a = [1, 2, 3]
list_b = [1, 2]
a – b # [3]

obj.keys – obj_wi

元記事を表示

RSpec include matcherあるのにexclude matcherないのかと思ったら速攻作れた話

## TL;DR

Negated Matchersを利用して、matcherを作成すれば終わる。

## Exlude Matcherを作る(秒で終わる)

“`sample_spec.rb
RSpec::Matchers.define_negated_matcher :exclude, :include
“`

## リファレンスに普通に記載がある

“`
Negated Matchers
Sometimes if you want to test for the opposite using a more descriptive name instead of using not_to, you can use Matchers.define_negated_matcher:

RSpec::Matchers.define_negated_matcher :exclude, :include
include(1, 2).description # => “include 1 and 2”
exclude(1, 2).description # => “exclude 1

元記事を表示

RSpecのbefore_actionのテストrequest specで書く

### TL;DR

mock class(Controller)を作成して、routingを追加して作成する

## なぜrequest specでbefore_action を書くことになったのか

抽象化しているまたは、ApplicationControllerで全てに
適応する、メゾッドのテストを記載しないといけなくなり、controller specは使えず(anonymous controllerは利用できないため)対応を考えた。

## 想定しているcontroller

“`application_controller.rb
class ApplicationController < ActionController::Base before_action :authenticate def authenticate // headerからauth処理関係 end end ``` 上記の問題は(実装もあるがテストで)、ApplicationController をrouting実装されておらず、request specでテストが記述

元記事を表示

【Ruby on Rails】HerokuとDBの紐付け方法

前提として

・HerokuはPostgreSQLを使用しているため、もし”gemfil”の”group :development do”配下でPostgreSQL以外を設定している場合はDBが使用出来ないので、注意下さい。
※例えば、”gemfil”の”group :development do” 配下に ”sqlite” を設定しまっている場合など。この場合は、”group :development, :test do”配下に移動するなど設定変更が必要。”gemfil”を変更したら、忘れず `bundle install` か `bundle update` を実行して下さい。

## 参考にした記事

## 1. まず、HerokuとGitリポジトリを紐付ける
https://blog.tanebox.com/archives/630/

## 2. Heroku PostgresをRailsアプリで利用する手順(Rails)
https://qiita.com/NaokiIshimura/items/550ca82e8e57aaea5582

## 1. まず

元記事を表示

Rails c でテーブル情報を取得するには

テーブル情報取得
ActiveRecord::Base.connection.tables
結果
=> [“schema_migrations”, “ar_internal_metadata”, “contacts”]

列の名前取得
【テーブル名】.column_names
=> [“id”, “name”, “email”, “content”]

列の情報取得
【テーブル名】.columns
結果
=>
[#

元記事を表示

lambdaについて

## はじめに

has_manyで使われるクエリをカスタマイズしたかったので、その方法を調べたところ、初めて見る記述だったので、調べてみました。
以下に例を示します。Postに関連するlikeを作られた逆順(新しい順)で取得するための記述です。

~~~ruby:author.rb
class Post < ApplicationRecord has_many :likes, -> { order(created_at: :desc) }
end
~~~

## has_manyのスコープ
Railsガイドでは、次のように説明されています。

>has_manyで使われるクエリをカスタマイズしたい場合があります。スコープブロックを用いてこのようなカスタマイズを行えます。

引用:[has_manyのスコープについて](https://railsguides.jp/association_basics.html#has-many%E3%81%AE%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%

元記事を表示

【Rails】eager_load, preloadの解説と、それに伴うスロークエリの改善【SQL Server】

# 概要

業務でRailsにてAPI開発をしているのですが、そこでとあるエンドポイントがタイムアウトになり始め、チームで問題となったのでその調査を行ったときの備忘録的な記事になります。

主な話題としてはActiveRecordの`eager_load`と`preload`の解説と、スロークエリとなった部分を`preload`にて改善した記事になります。

また、実行環境は以下になります
**注意: DBとしてSQLServer, アダプタでactiverecord-sqlserver-adapterを使っているので、違う環境だと結果が変わる可能性があります**

– ruby 2.7.2p137
– Rails 6.0.4.4
– activerecord-sqlserver-adapter 6.0.0
– activerecord 6.0.0

# eager_load, preload, includesの復習

## eager_loadとは

`eager_load`は、`LEFT_OUTER_JOIN`で指定したデータを結合し、関連テーブルのデータ配列を取得してキャッシュ

元記事を表示

N+1問題の解決方法(初心者向け)

## 環境

Ruby 2.7.3

Rails 6.1.4

## N+1問題とは

**必要以上にSQLが発行されてしまい、パフォーマンスが悪くなる問題のこと**。

実際にN+1問題の例を以下に示す。
シンプルに`Userカラム`と`Groupカラム`が中間テーブル`GroupUser`を跨いで多対多の関係になっている。

![Database ER diagram (crow’s foot) – Database ER diagram (crow’s foot).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2508607/125dc7d0-9a5e-1cfd-b963-9c9c3c3ea46b.png)

N+1問題について考えず、各GroupのUserに対してある処理をしたい。
以下のようにUserデータを取得するために、随所随所でSQLが発行されておりパフォーマンスが悪い。

問題のあるコード

“`ruby
Groups.each do |group|
group.users.

元記事を表示

ActiveStorageでRspec実行時に生成された画像データをテスト終了後自動で削除する方法

## 概要
`ActiveStorage`で`Rspec`実行時に生成した画像ファイルをテスト終了後に自動で削除する方法をメモとして残しておきます。
`Rails`で`Rspec`を用いてテストする際に画像を生成する場合があると思います。
その際に生成されたテスト用画像データは下記のように`config/storage.yml`に設定された保存先に保存されます。

“`ruby
test: # ‘root’にテスト時に生成された画像を保存する場所を指定している
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
“`
テストを行っていくとどんどんと保存先のストレージが生成された画像で圧迫されてしまいます。
しかし、ある設定をすることでテスト終了後はストレージをクリーンアップすることができます。

## 方法
_*spec/rails_helper.rb*_

“`ruby
RSpec.configure do |config|
config.after(:all) do
FileUtils.rm_

元記事を表示

OTHERカテゴリの最新記事