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

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

link_toのソースコード読解

ネットでオープンソースを読解することで良い勉強になるということを見かけたので、Railsでも代表的なメソッドであるlink_toのソースコードを読解してみようとおもいます。そして最後のほうに、具体例をあげてコードを追ってみようとおもいます。
事前に申し上げておきますが、今回の記事はかなり重厚になることが予想されます。また、privateメソッドが多いため読解するメソッドがコロコロ変わりますのであしからず。

それでは実際のソースコードを以下にペーストします。
“`
def link_to(name = nil, options = nil, html_options = nil, &block)
html_options, options, name = options, name, block if block_given?
options ||= {}

html_options = convert_options_to_data_attributes(options, html_options)

url = url_target(name, options)

元記事を表示

【個人開発】「真のナポリピッツァ協会」認定店をサクッと探せるWebサービスをリリースしました。

## はじめに
[おおの](https://twitter.com/ohno_hope3)と申します。
突然ですが、**真のナポリピッツァ**[^1]を食べたくありませんか?
これを使えば**真のナポリピッツァが食べられて感動すること間違い無し**というサービスを開発しました。
![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/804334/fb766782-164b-270b-1fc7-8955e8622296.png)
– ナポリピッツァ好きが**真のナポリピッツァ協会認定店**[^2]をサクッと探したい。
– ナポリピッツァを意識して食べたことがなかった人に**真のナポリピッツァ**[^1]の感動を伝えたい。
– ナポリピッツァ界隈の発展を応援する想いを込めて **『真のナポリピッツァ部』** を開発しました。

**URL:** https://www.napolipizza-club.com/
**GitHub:** https://github.com/shota-hope/True

元記事を表示

ルーティングの指定方法について

ルーティングにおいて

collectionとmenberの違い。
idを特定することができるのがmember
書き方としては下記のようになる。

collection do
post :confirm
end
member do
patch :confirm
end

もしくは
 
  post:confirm, on:collection
  patch :confirm, on:member

と書くこともできる。

元記事を表示

TDDで機能追加するとき

# overview
– Railsのアプリに機能を追加したり編集したり削除したりするときの自己流フロー
– 備忘録
– TDDでやりんす(Minitest)

# Get staretd
### Issue作成
1. githubでissueを作る
1. チェックボックスでテストメソッドのタイトルを書いておくと良いかも

> テストを作る際には以下のルールを設けています
> ・基本的にModelごとにcreate, read, update, deleteの4ファイルで構成される
> ・各テストファイルのテスト名はUnable to 〜, Able to 〜と2種類の文頭で始まる
> ・Unable to 〜でNGなリストを作ることでテストファイルを仕様書として機能させます

“`
# example

– [ ] Create
– Unable to create without Login
– Unable to create with blank
– Able to create
– [ ] Read
– [ ] Update
– [ ] Delet

元記事を表示

【Rails】any?メソッド

モデルにデータが存在するとtrue
モデルにデータが存在しないとfalse

ブロックで使用する場合はブロック内の条件が一つでもtrueであればtrueを返す。

元記事を表示

【Heroku】herokuでRailsアプリをデプロイする際の基本的な手順のまとめ

## 本記事の前提
**使用環境**
– Rails 5.2.6.2
– ruby 2.6.6
– git 2.18.5
– AWS Cloud9

**省略作業**
– Herokuアカウントの登録
– Gitのインストール
– デプロイするアプリの作成

## デプロイする手順
### 1.Heroku CLIのインストール
Herokuの操作をコマンドラインから行えるようにするために、Heroku CLIをインストールしていきます。
以下の公式サイトからご自身のOSに合ったものをインストールして下さい。

https://devcenter.heroku.com/articles/heroku-cli

**AWS Cloud9の場合**
以下のコマンドを全てコピーし、ターミナルに貼り付けて実行して下さい。
“`terminal:terminar
$ curl -OL https://cli-assets.heroku.com/heroku-linux-x64.tar.gz
tar zxf heroku-linux-x64.tar.gz && rm -f heroku-linu

元記事を表示

【Heroku】Rubyバージョンの差異によるエラーの解決

## 発生したエラー
![スクリーンショット 2022-03-03 10.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694767/3ce57220-2142-1b6f-ac9e-bbe3be567ed7.png)
git commitしたの後にgit push heroku masterを実行し、アプリをデプロイしようとしたところ、Rubyバージョンが2.6.3のためにheroku-20にデプロイできないという旨のエラー発生した。。

## 解決方法
解決策としてherokuのstackを20から18に下げる方法もあるが、今回はRubyのバージョンをheroku-20に対応している2.6.6に変更することで解決していく。Rubyのバージョンを2.6.6に変更する際の作業の流れは以下のようになる。

1.Rubyバージョンの確認し、Ruby2.6.6をインストール
“`terminal:terminal
$ rvm -v //rvmのバージョンとインストールされていることを確認
$ rv

元記事を表示

【Rails】ページネーション機能の導入

#gem kaminariによるページネーション機能の実装

## 実装の流れ
1. Gemfileにgem ‘kaminari’を追加する。
1. bundle installを実行してkaminariをインストールする。
1. rails g kaminari:configを実行してkaminariの設定ファイルを作成する。
1. rails g kaminari:views defaultを実行してページャで利用するテンプレートを作成する。
1. 該当するコントローラー,ビューにページャを実装していく。

## 1.Gemfileにgem ‘kaminari’を追加する。
“`rails:Gemfile
gem ‘kaminari’
“`

## 2.bundle installを実行してkaminariをインストールする。
“`rails:terminal
$ bundle install
“`

## 3.rails g kaminari:configを実行してkaminariの設定ファイルを作成する。
“`rails:terminal
$ rails g kami

元記事を表示

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#

元記事を表示

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のソースコードをアウトプットしようと思っていますので重めの内容になるかと思います
以上です。何か間違いがございましたら、ご教示いただ

元記事を表示

【Rails】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

元記事を表示

OTHERカテゴリの最新記事