Ruby関連のことを調べてみた2021年08月19日

Ruby関連のことを調べてみた2021年08月19日
目次

初めてのRSpec① 超初心者が参照した記事まとめ モデルテスト編

初めに

今回、初めてテストを書きましたが、そもそも書くまでの道のりが長く、、
ややこしかったので参考にしたサイトをまとめてみました。

ひとまず基本を理解する

テストコードちらっとみたことあるけど、
書いたことは全くなかったので以下の記事を読みました。

https://note.com/devtetsu/n/nd29c50468480

https://qiita.com/jnchito/items/2a5d3e15761fd413657a

必要なGem、ファイル、FactoryBot準備

https://qiita.com/nakachan1994/items/29369470d50d0fcd0f6c

個人的メモ
以下、下の3つ入れます。
“`gem “factory_bot_rails”“`はテスト用のサンプルデータを
簡単に作成することができるGemです。
“`gem ‘faker’“`はダミーデータを作成してくれます。

“`perl

元記事を表示

【Ruby on Rails】他テーブルのカラムも検索して表示する方法

#対象者

* 他のモデルのカラムまで検索をする方法を考えている方

#目的

* 他モデルのカラムを検索してViewに表示する

#実際の手順と実例
###1.前提

下記を元に実装しています

https://qiita.com/nao0725/items/1dbe59c63419179d1818

* ここでは記事のタグ名を検索します。
* Article、Tag、ArticleTagの3つのモデルを使用
* ArticleTagを中間テーブルとして実装しています。
* tag_nameカラムをTagテーブルで確認します。

###2.joinsメソッドを使用

**joins**メソッドとはテーブル同士を内部結合して検索するためのメソッドです。

これを元に検索メソッドを使用すると

“`article.rb
def self.search(search_word)
Article.joins(:tags)#①
.where([“title LIKE(?) OR body LIKE(?) OR sub_title LIKE(?) OR tag_n

元記事を表示

rails tutorial 6章まとめ。バリデーション、正規表現、has secure password

# **バリデーション**

・存在性 presence: true

・一意性(唯一無二のユーザーにする為のもの) uniqueness: true 

・長さ length (何文字以下はNGとかの為)

# 正規表現(Regular Expression)

regexとも言う。

メルアドの正規表現を設定した。

“`ruby
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/**i** 
“`

**# iの部分は大文字小文字を無視するオプション。**

DBには全部小文字変換して取り込むから、大小区別する必要ない。

これは、無効なアドレスを拒否する為のもの。

(@を入れてないのはNGとか)

# データベースにインデックスを挿入

これをやると、効率化を図れる+データベースの一意性を担保できる。

# has secure password

を使うと

➀passwordをハッシュ化(暗号化)できる。

(password_digestカラムがないと使えない。)

②**authenticateメソッド

元記事を表示

30代実務未経験がRailsでオリジナルポートフォリオを作成

# はじめに
こんにちは、Nonaと申します。
31歳でWebエンジニアになることを目標に2021年5月からスクールにてRailsを中心に学習中です。これまで学んできたことをいかして今回Railsにてオリジナルアプリを作成したのでアプリについて説明させていただきます。

##アプリについて
###No Dog,No Life!(犬の同伴がOKな場所の情報共有サイト)
いつでもどこでもワンちゃんと一緒にお出かけをしたい!そんな方のためにワンちゃん連れ OK の穴場の PLACE(公園、お店、施設)情報を共有し合うサイトです。
URL : https://nodognolife.xyz/
GitHub : https://github.com/Naru-hub/PF_NoDogNoLife

![nodognolife1b.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1397453/05edfd6c-a8b9-fc3b-4497-9c3202e484cb.gif)

##なぜこのアプリを作ったのか?

元記事を表示

[Rails] GitHubでプルリクエストを受けたときの動作確認方法

自分用の備忘録となります。

## 前提として
– プルリクエストを受けたブランチの名前を `ブランチ名` と定義します

– 利用環境
– Ruby 2.7.3
– Rails 6.1.4

## GitHubとローカル環境の連携
– github上でプルリクエストを受けたブランチを開く
– そのブランチでURLをコピーする
– プロジェクトのあるローカルリポジトリに移動し下記を実行

“`terminal:ターミナル
$ git remote add ブランチ名 githubでコピーしたURL
“`

リモートを確認する。

“`terminal:ターミナル
❯ git remote

ブランチ名
origin
“`
このように表示されていればOKです。

## Fetchを実行する
今回のFetchの意味合いとしてはGitHub上にあるブランチ情報をとってくるという意味になります。
`$ git fetch ブランチ名` を実行

“`terminal:ターミナル
❯ git fetch ブランチ名
From https://github.com/〜URL〜

元記事を表示

Ruby 配列の基本的な使い方 

#Ruby 配列の基本
こちらの記事を参照してください。
https://qiita.com/Hashimoto-Noriaki/items/63026ef88a58975e2cfb

#配列の追加, 更新 ,削除

“`

scores = [10,20,30,40,50]

#追加
scores << 100 [10, 20, 30, 40, 50, 100] scores.push(20) *rubyは()を省略してもok => [10, 20, 30, 40, 50, 20]

#更新
scores[1] = 10
=> [10, 10, 30, 40, 50, 20]

#削除
scores.delete_at(2)   *3つ目の要素を削除
=> [10, 20, 40, 50]

“`

元記事を表示

【Rails】gem sanitizeを用いてHTMLをサニタイズしてみた

## はじめに

HTMLの中にあるscriptタグなどの除去(サニタイズ)を行いたかったため、Railsにおけるサニタイズの方法のベンチマークを行い、ベンチマークにおいて最良と判断したgemを使ってサニタイズの処理を実装しました。本記事ではベンチマーク結果とsanitizeというgemを用いたサニタイズの方法についてまとめています。

## 実現したかったこと

実現したかったことは、下記のHTMLに含まれるようなscriptタグやaタグのhref属性値にJavascriptが含まれる場合を想定し、scriptタグを全て除去、aタグがhref属性値がURLなどの安全でない値の場合に除去することでした。

“`html:sample.html
?

header1

header2

header3

?

RailsでECサイトのカート機能を実装する(改訂版)

## はじめに
[RailsでECサイトのカート機能を実装する](https://qiita.com/akmhmgc/items/a40b91aa4f469c397f85)
での
– URI設計
– コントローラーに寄りすぎたロジック
の二点を改善しました。

## ER図
Userモデルは除いています。
![ec.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1053396/483ee996-0db3-f64f-90ee-66c13d68ba40.png)

## Cart、Item、Productテーブルのmigrationファイルの作成
“`
$ rails g model Cart
$ rails g model Product name:string price:integer
$ rails g model Item cart:references product:references quantity:integer
$ rails db:migarate
“`

## ルーティング

元記事を表示

[Ruby] 基礎

# オブジェクトのクラスを調べる
“`
> “氏名”.class
=> String # 氏名というオブジェクトのクラス
“`
# クラスとインスタンス
* オブジェクトXのクラスがAであるとき、XはAのインスタンス(オブジェクト)であるという。

# 変数
“`
> label = “氏名”
=> “指名”
“`
* 上記のコードは変数labelに”氏名”オブジェクトを代入している。(ローカル変数)
* ローカル変数・・・プログラム中の一定の処理の範囲で使われ、その範囲が終わったら捨てられる。
* ローカル変数の名前はアルファベットの小文字かアンダースコア(_)で始める。
* インスタンス変数・・・オブジェクトの内部に保存されてオブジェクトが存在する限り一緒に存在する。
* 定数・・・アルファベットの大文字から始まる名前。 保持する値が不変。

# メソッド
* def メソッド(引数)

# レシーバー
* メソッドの呼び出しにおいて、そのメソッドのもつオブジェクトのことをレシーバーという。
* オブジェクト(レシーバー).メソッド

元記事を表示

[Ruby] AtCoder 過去問 B – Digit Sums

##はじめに
AtCoderのB問題 Digit SumsをRubyで解いてみました。

問題の確認は下記からお願いします。
他のやり方などご教授いただけると幸いです。
それではよろしくお願いします。

https://atcoder.jp/contests/abc101/tasks/abc101_b

##B – Digit Sums

まずは入力の受け取りです。
今回は数値を一つだけ受け取ればいいので下記のように記述するだけで十分です。

“`Ruby
n = gets.to_i
“`

この数字を桁ごとに分解して、それらを足し算する必要があります。
このとき私は、まず文字列に変換して、charsメソッドで一文字ずつに分けて、再度数値に戻して。。。と考えていましたが、とても便利なメソッド、digitsメソッドを見つけましたのでこちらを活用したいと思います。

使い方は下記の記事にまとめておきました。

https://qiita.com/minhee/items/5a01438f20e274f58ed8

簡単にいうと数値を桁ごとに分けて配列で返してくれます。
さらにその配

元記事を表示

【個人開発】Slack社公認アプリ!プロフ帳モチーフの社内プロフィール共有サービス「プロフちゃん」をリリースしました!

# オープニングソング

「ぷろぷろぷろぷろぷろふちゃん ♪

わたしのことをきいてよね ♪

みんなのことがしりたいな ♪

たのしくつながろうはっぴー ♪」

![https://i.gyazo.com/3ffaba3c2cbd9fac8ff19112ed3c75f2.png](https://i.gyazo.com/3ffaba3c2cbd9fac8ff19112ed3c75f2.png)

> 「プロフちゃんの歌」より

# はじめに

リモートワークしている方!1つ質問させてください!

**Q「今日は会社の人とたくさん雑談することができましたか?」**

コロナによってリモートワーク体制が主流になり他の社員と直接話す機会が極めて少なくなった現在、この質問にはっきりと「Yes!」と答えられる方は少ないと思います、、。

コロナ以前はよく話していた会社の人とも話す機会が少なくなり、ZOOMやDiscordで話すことは基本的に仕事のことばかり。雑談がないためか他の会社の人の近況を知る機会がほとんどありません。

特に、完全リモートワーク体制の会社に入社する新入社員は、先輩社員の情

元記事を表示

【個人開発】遠距離恋愛成功に三度目の正直を願う男が、遠距離恋愛ができる限界を教えてくれる診断アプリを作ってみた。

# はじめに

### 初めまして。突然ですが、みなさんは遠距離恋愛を経験したことがありますか?

経験したことがない方が多いのではないでしょうか。
一方で大阪とシドニー、東京とロンドンといったように国境を超えて経験したことがある方もいらっしゃるかもしれません。

**(お時間のない方は、次の章へどうぞ)**

タイトルにもあるように、僕自身これまで遠距離恋愛に二度失敗してきており三度目にリーチがかかった状態です。
ですので、何とも言いようのない緊張感があります。

##### さて、ここでなぜ遠距離恋愛をすることになるか考えてみましょう。

二つの場合があると思います。付き合う時から遠距離恋愛の場合と付き合ってから遠距離恋愛になる場合です。
僕は後者の場合でしたが、遠距離恋愛になってから今まで近くで過ごせていた当たり前に気がつくことができました。
この二度の失敗を通して、正直自分には向いていないんじゃないかと悲しくなることも多々ありました。

そこでふと思いました。

##### あらかじめ遠距離恋愛ができる距離の限界が分かっていたらいいのになぁ。と
~~そうすれば、失敗を距離のせい

元記事を表示

AWS(VPC/EC2/RDS/Routes53)デプロイ時のエラー

## はじめに

AWS(VPC/EC2/RDS/Routes53)を使用してポートフォリオアプリをデプロイしました。参考にしたQiita記事を貼り付けておきます。

– https://qiita.com/take18k_tech/items/5710ad9d00ea4c13ce36

この記事では、上記記事を参考にデプロイした際のエラーについて解決方法を記載します。

## 開発環境

– Ruby 2.7.2
– Rails 6.1.4
– Docker
– MySQL
– CircleCI(RSpec、Rubocop)

## デプロイしたアプリのインフラ構成図

![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1536072/1d10108f-62b8-9da2-3bda-9eded75b95ea.png)

– 参考(デプロイしたポートフォリオのアプリ)↓

– http://target-01.work/

## エラー内容
### yumがアップデー

元記事を表示

MySQL × Rails でサーバのデータベースをダンプし、ローカルにリストアする

# はじめに
開発中、ローカル環境だとデータのサンプル数が少なすぎて動作確認しづらいときがある。

そこで、開発用のサーバにあるデータをローカルに移行する方法について紹介する。

# リモート側の操作
SSH で開発用サーバにログインして、Rails Console を起動する。

“`shell:Shell
cd /path/to/remote/app
bundle exec rails console
“`

Rails Console 内で以下の Ruby を実行する。

“`ruby:Console
environment = Rails.env
configuration = ActiveRecord::Base.configurations[environment]
cmd = “mysqldump -u #{configuration[‘username’]} -p#{configuration[‘password’]} -h #{configuration[‘host’]} -P #{configuration[‘port’]} #{configuration

元記事を表示

[Rails] コメント機能の実装

結構個人的には苦労したため備忘録です。

利用環境
・ruby 2.7.3
・Rails 6.1.4

## 実装内容
ユーザの投稿(post)に対してコメント機能(comment)の実装
CommentテーブルはPostとUserの中間テーブルとします。
PostとUserはすでに作成済み前提で記載します。
コメント機能と関係のないコードは省略しております。

## モデル作成
Commentモデルの作成

“`terminal:ターミナル
$ rails g model Comment content:text user_id:integer post_id:integer
$ rails db:migrate
“`

## アソシエーション(関連付け)
それぞれのモデルに下記を追記する。
`dependent: :destroy` は `user` が削除された際に `post` と `comment` も同時に削除させるため

“`ruby:app/models/user.rb
class User < ApplicationRecord has_many :post

元記事を表示

RailsからLDAPSでActiveDirectryのユーザパスワード変更

エンタメ系企業の社内もろもろを担当しているakibinです。

最近、我が息子(4)はKroiというバンドの[balmy life](https://www.youtube.com/watch?v=oaBD-FpzArU)という曲にハマってます。かけてくれとせがむせがむ。今度彼のお気に入りプレイリストでも作ってあげよ。

# やったこと
ドメイン参加していない状況で、ActiveDirectryのユーザパスワードをユーザが変更できるアプリをRailsで作成する必要がありました。
基本ドメイン参加してればパスワード変更できるので、あんまりないケースなのかと思いますが、そのあまりないケースが発生したので…

今回はRubyからLDAPでディレクトリサービスを操作できる[net-ldap](https://rubygems.org/gems/net-ldap/versions/0.15.0?locale=ja)というgemを使用しました。

# ADのパスワード変更するための条件
なにやら色々調べていたら、ADの場合はOpen-LDAPとかと違って、LDAPで色々操作するには条件があるようで

元記事を表示

【Rails】ActiveAdmin エラー#You’re trying to register 〜 対処方法

※備忘録です。

## ActiveAdminでユーザのコメントを管理したい!

利用環境
・ruby 2.7.3
・Rails 6.1.4

## 前提条件
gemの `activeadmin` はインストール済み
ユーザが投稿した内容: `post` テーブル
その `post` に対してコメント: `comment` テーブルを実装済み
`activeadmin`を使ってこの `comment` を管理したい

## エラー内容と流れ
`rails g active_admin:resource Comment` を実行
> `app/admin/comments.rb` ファイルを作成
上記ファイルに `permit_params :content` を追加
`rails s` でサーバー起動

“`
You’re trying to register ActiveAdmin::Comment as Comment,
but the existing ActiveAdmin::Resource config was built for Comment!
“`
このようにエ

元記事を表示

Rails form_withの使い方

使用環境
ruby2.6.8
rails6.1.4

#form_withとは
railsで情報を送信するためのヘルパーメソッド。
form_withを使うことにより、簡単に入力フォームに必要なHTMLを作成することが可能。
rails5.1から追加されたフォームを作成するためのヘルパーメソッドで、それ以前に用いられていたform_tagやform_forのように用いられている。
(現在はform_withを使うことが推奨されている)

#form_withの使い方

form_tagのように入力された情報をデータベースに保存しない場合

“`erb
<%= form_wth url: "パス" do |f| %>
内容
<% end %>
“`
データベースに保存する場合

“`erb
<%= form_with model: モデルクラスのインスタンス %>
内容
<% end %>
“`
上のようなデータベースに保存する場合でもpathの指定は可能で

“`erb
<%= form_with model: モデルクラスのインスタンス,url: "パス"

元記事を表示

似ているけど違う!? [ 繰り返し処理 ] mapメソッド、eachメソッド

#はじめに
今回はmapメソッドとeachメソッドの使い分けについて考えてみました。
似ているようで似ていない2つの処理について代表的な書き方をまとめましたので、
僕と同じ学習中の方の役に立てればいいと思います。
初心者でもわかりやすいように各文法を日本語で書いてみましたので、当てはめるだけで書くことが出来ます。

##mapメソッド

### ** 配列名.map { | 要素名 | 処理 }**
配列の各要素に対してブロックで処理を行い結果を配列として返してくれます。
処理の時だけ結果を返してくれて、その後は元の配列のままです。

“`ruby
# mapメソッド
numbers1 = [1, 2, 3, 4, 5]

p numbers1.map{|number| number * 2}
#=> [2, 4, 6, 8, 10]   *処理の時だけ
p numbers1
#=> [1, 2, 3, 4, 5]   *元の配列に影響は無い
“`
“`ruby
array = [“1”, “2”, “3”, “4”, “5”]

p array.map(&:to_i)

元記事を表示

Ruby on Railsの@(アットマーク)の意味

## Rubyにおける@はオブジェクトのインスタンス変数を表す

Rubyにおいて@がついた変数はインスタンス変数と呼ばれます。オブジェクト指向プログラミングのクラスは「人間」、「車」などのモノを表し、インスタンスは「太郎」、「太郎のマイカー」などの具体的に実態のあるモノを表します。同じクラスでも、インスタンス毎に違う値を持てるような変数をインスタンス変数と呼びます。

### 具体例

“`ruby
class Human
def set_name(name)
@name = name
end

def say_name()
puts @name
end
end

human1 = Human.new()
human2 = Human.new()

human1.set_name(“taro”)
human2.set_name(“jiro”)

human1.say_name() # taro
human2.say_name() # jiro

“`

## Railsのコントローラークラスにおけるインスタンス変数はビューから参照できる

Railsでは@が特別な

元記事を表示

OTHERカテゴリの最新記事