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

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

rubyにおける::(ダブルコロン、コロンコロン)スコープ演算子

rubyではスコープ演算子というのがあります。::っていうやつです。
これを使うと、クラスやモジュールで定義されている定数を外部から参照することができます

“`
module Test
HOGE=20
FUGA=30
end

class Hogehoge
hoge = Test::HOGE
p hoge
end
=> 20
“`
こうすることによってmoduleで定義されている変数を参照することができるんです。

今回はメモ書き程度に終わらせようとおもいます
以上です。何か間違いがございましたら、ご教示いただけますと幸いです。

元記事を表示

テストコードを書く

なぜテストコードを書くのか

アプリケーションが、想定通り正しく動くのか、確認するため。

Ruby on Railsでは、アプリケーションのテストコードを記述する機能を、RSpecというGemを使うことで便利に実装できる。

1. RSpecを導入する

① まず、RSpecのGemを導入する

Gemfile

“`
group :development, :test do
    (  ~省略~ )
gem ‘rspec-rails’, ‘~> 4.0.0’
end
“`

Gemfileを変更したので、

“`
~ frima-app % bundle install
“`

② RSpecをアプリ内にインストールする

“`
~ frima-app % rails g rspec:install
“`
③ .rspecファイルに、記述する
テストコードの結果を、ターミナル上で表示するため。

“`.rspec
( ~省略~ )
–format documentation
“`

2. FactoryBotを導入する

FactoryBot: 

元記事を表示

ログインができません<初心者>

ログインが出来ないだって?

Railsでアプリを作成中。
deviseを使用してユーザー管理機能を実装していました。
サインアップ、ログアウト、編集機能まで順調に進めていたところ、最後に確認としてもう一度正常に動くか確認したところ、、、

ロ、ログインができない・・・

ここまできてなんてこった。
どこが原因なのか・・・

「Devise::SessionController#new」を経由しているし
サーバーは反応しててパラメーターにもちゃんとメールアドレスとパスワードが入っている。
SequelProを見ながら間違いなく入力しているのに何度やってもログインに失敗し、

“`
Invalid Email or password.
(メールアドレスまたはパスワードが無効です。)
“`
↑ これの嵐。

初心者の自分にはパニックで一時フリーズ。
いったん冷静になって、また考えました。

MVCの流れに沿って進んでいる。
メールアドレスかパスワードが無効ということは、

「空」なのか「間違っている」かのどちらか。

でもどちらも間違っ

元記事を表示

dbのインデックス備忘録

インデックスについて学んだので、備忘録です。

## インデックスとは
**索引。dbの検索性能を上げる**

なぜ検索性能が上がるのかというと、インデックスをつけたカラムでは、レコードが作成される際にソートが行われ、検索したい文字列や数字を全レコード確認することなく、発見することができるから。

### メリットとデメリット
#### メリット
– レコードの検索やソートの速度が上がる

#### デメリット
– レコード作成時にソートしないといけない関係で、書き込みの時間が増える

### 例
ブログなどの何かしらの記事を投稿するpostsテーブルについて考える。レコードは以下の感じ。

*postsテーブル*

| id | body | created_at |
| :— | :— | —: |
| 1 | 本文です。 | 2022-01-01 12:00:00 |
| 2 | 本文です。 | 2022-01-01 12:01:00 |
| 3 | 本文です。 | 2022-01-01 12:02:00 |
| 4 | 本文です。 | 2022-01-01 12:

元記事を表示

rails 自動整形ツールRubocopの導入

# はじめに
rubyの自動整形ツールであるrubocopの導入方法をまとめる。

# 環境
– rails 6.0.4.4
– ruby 2.6.5
– rubocop 1.25.1

# Rubocopとは
Rubyのコード解析ツール。
自身で決めた規定通りにコードを書けているか解析、かつ、自動で修正してくれるツール。
インデントを揃えたり、余分な改行・スペースを削除したりできる。
[RubyStyleGuide](https://github.com/fortissimo1997/ruby-style-guide/blob/japanese/README.ja.md)に基づいて指摘を行う。

公式 https://rubocop.org/

# Rubocopの導入方法
Gemファイルに記載

“`Gemfile.
groupdevelopment do
gem ‘rubocop’, require: false
end
“`

インストール

“`ターミナル.
bundle install
“`

Rubocopの設定ファイルを新規作成

“`ターミナル.
to

元記事を表示

【Ruby】名前空間とは

# はじめに
Rubyでモジュールについて学習していたら「名前空間」なる不思議な名前のやつが出てきたのでまとめてみました。
調べてみるとRailsでよく見かける「ActiveRecord::Migration」も名前空間のようです。

# 名前空間とは
名前空間(namespace)とは、なんらかの理由でクラス名が重複するときに、それぞれを区別するために定義するモジュールです。

## 使い方

“`ruby
class Greet
def hello
‘hello world’
end
end

class Greet
def konnichiwa
‘konnichiwa sekai’
end
end
“`

このように同名のクラスを区別するために、それぞれをモジュールで括ります。
モジュールに属するクラスを参照する際は「モジュール名::クラス名」と書きます。
つまり「A::B」は「A」というモジュールに属する「B」というクラスということです。

“`ruby
module English
class Greet
def hello

元記事を表示

更に Ruby の Matrix で pagepank をやってみた

# はじめに
https://qiita.com/superrino130/items/42ac760b0f202cefe6bc

前回の記事を投稿後、Rubyの元標準ライブラリの`Matrix`があったので、更にやってみた。

https://docs.ruby-lang.org/ja/latest/class/Matrix.html
# 問題の整理[再掲]
ノード数`N`の有向グラフがある。
高橋くんはノード1からスタートして100回ランダムな遷移を行います。
遷移後、高橋くんがどのノードにいるかを答えてください。

“`
入力
N M
A1 B1
.
.
.
Am Bm
“`
“`
入力例
5 7
1 2
1 3
2 4
3 4
3 5
4 5
5 1
“`
# Ruby Matrix版
“`ruby:matrix.rb
require ‘matrix’

n, x = gets.split.map(&:to_i)
m = Matrix.zero(n)
x.times do
a, b = gets.split.map(&:to_i)
m[b – 1, a – 1

元記事を表示

Rails チュートリアルのrails serverでエラーが出た

前提

railsチュートリアルの「1.3.2 rails server」でサイトを表示したい。

開発環境 -> Cloud9
rubyおよびrailsバージョンは以下の通り。

“`terminal
ruby -v -> ‘6.0.3’
rails -v -> ‘5.1.0’
“`

チュートリアルの1.3.1までの環境構築は終わった状態で以下を実行。

“`terminal
Cloud9User:~/environment/hello_app (master) $ rails server

#省略

Use Ctrl-C to stop

“`

ここでpreviewすると以下のメッセージ

![ecc24368fac55bcbb0887b02bedc8076.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106470/c3d3aef3-741d-23f1-8a01-7de51cb31f91.png)

エラーメッセージ↓
config.hosts << "de3360

元記事を表示

Ruby で XML を rexml で パースする

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 概要
バイオインフォマティクスには色々な書式の元データがあります。
それを同じ形式にパースすれば、その後の処理が楽になります。
`activesupport`や`nokogiri`を使用する方法もありますが、ひとまず標準ライブラリの`rexml`でやりたいと思います。
# どうすRuby
“`test.xml


test
MS2


“`
“`ruby:main.rb
require ‘rexml/document’

doc = REXML::Document.new(File.open(“test.xml”))
puts doc.elements[‘a/b/title’].text
puts doc.elements[‘a/b/value’].attribute(‘count’).value

# output
test

元記事を表示

『rails』いいね機能の実装方法② 非同期通信の実装

#はじめに
 現在オリジナルアプリの散歩習慣化アプリを製作中です。
以前の記事で、いいね機能の同期通信までをまとめたので、今回は同期通信までをまとめます!

前の記事です。
『rails』いいね機能の実装方法① 同期通信まで
https://qiita.com/yuhi_taka/items/47d8e50ea17b59f016c8

#前提と目標 
**・前提**
前回までの「同期通信まで」で以下の状態まで実装できています。
[![Image from Gyazo](https://i.gyazo.com/4f32c0931667c17c49b3b5298d8d9947.gif)](https://gyazo.com/4f32c0931667c17c49b3b5298d8d9947)

同期通信で、いいねができるようになっています。

データベース設計は以下のとおりです。
![morning-walk.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2378833/3ff33848-1115-b8a7-

元記事を表示

配列でのpopやunshiftなどのメソッド

## popメソッド
popメソッドは配列の最後の値を取り除くメソッドです。
ぼくなりの覚え方ですが、popには「飛び出る」という意味があるので、一番最後の端っこから飛び出るというイメージを持って覚えています。

引数に数字(例えば、今回のように2を指定し場合)を指定した場合、末尾からその数字分(今回であれば、2つ)の要素を取り除きます。
“`
array = [1, [2, 3], 4]
p array.pop # => 4
p array.pop # => [2, 3]
p array # => [1]

p array.pop # => 1
p array.pop # => nil
p array # => []

array = [1, 2, 3]
p array.pop(2) #=> [2, 3]
p array #=> [1]
“`

## append(push)メソッド
配列の末尾に要素を追加する
“`
array = [1, 2, 3]
array.push 4

元記事を表示

Pumaが起動しない。Deployできない。その時に真っ先につぶしておきたい可能性

# 概要

– ステージングやプロダクション環境でPumaを起動しようとするとエラーが出て起動しない
– ステージングやプロダクション環境にデプロイしようとするとエラーが出て途中で終了する
– ローカルの開発環境ではエラーなくRailsが起動する

このような状況になった時、様々な原因が考えられます。
デプロイ設定やインフラが疑われますが、真っ先につぶしておきたい可能性があります。

**本当にローカルの開発環境ではエラーないの?**

この記事ではその確認方法を紹介します。

# 目次

[バージョン](#バージョン)
[エラー状況](#エラー状況)
[エラー原因](#エラー原因)
[確認方法](#確認方法)
[よくあるエラー](#よくあるエラー)
[最後に](#最後に)

# バージョン

Ruby:2.7.3
Rails:6.1.4.4
Puma:5.0
Capistrano:3.16.0

# エラー状況

Puma起動時にエラーになる

“`sql
/var/www/rails/application/shared/vendor/bundle/ruby/2.7.0/gems

元記事を表示

ポートフォリオとして転売を防止するアプリTenba×IyaというWebアプリを作った

#はじめに
ポートフォリオとして作成したWebアプリケーションの紹介記事です。

##作成した人
- 独学でRuby on Railsの学習を行いWebアプリの開発を行っています。
- 仕事は建築関係の仕事に就いています。

作成したアプリの概要
- 「転売目的の商品の大量購入を防止する」ことを目的に作ったWebアプリケーションです。
- サービス名は「Tenba×Iya」としました。
- 転売屋と転売 嫌からTenba Iya、さらに嫌を×で表してみました。
![キャプチャaa.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/948501/a679e5b5-7b29-aa42-b4a1-bc9668fdbdcc.jpeg)

最近、転売による商品の不足、高騰などが問題になっているなと思い、アプリを作成しました。
転売をするためには商品を大量に購入する必要があると考え、一つの商品を大量に購入できないような仕組みとしてアプリを作成しています。

ただ、アプリの作成はしましたが、購入する際に手間が増える、

元記事を表示

Railsのscopeとは

## scope(スコープ)とは

特定のSQL文をメソッドのように呼び出すことができる機能のことです。

下記のように、モデル内にscopeを定義することで使用することができます。

“`hoge_hoge.rb
class HogeHoge < ApplicationRecord scope :active, -> { where(deleted: false) }
scope :by_account, -> lambda{|account_id|where(account_id: account_id)}
end
“`

“`rb
# 使用例
HogeHoge.active

HogeHoge.by_account(params[:account_id])

HogeHoge.by_account(params[:account_id]).active
“`

## 何が便利なのか?
・コードが短くなる。

・適切なscope名をつけることで、直感的に読みやすいコードになる。

・何度も同じようなクエリを使いまわしている場合、
 scopeを使用していれば、

元記事を表示

rails heroku上のDBをリセットする

# 結論
heroku上のDBをリセットするには、以下のコマンドを実行する。

“`ターミナル.
heroku run rails db:migrate:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1
“`

# 環境
– rails 6.0.4.4
– ruby 2.6.5
– MySQL 5.6.51
– heroku

## heroku runでDBリセットのコマンドを実行
heroku上のDBをリセットしようと以下のコマンドを実行した。

“`ターミナル.
heroku run rails db:reset
“`
以下のエラーが発生。

“`ターミナル.
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
If you are sure you want to continue, run the same command wi

元記事を表示

解決方法_Webpacker::Manifest::MissingEntryError

# 初めに
原因は細かに追求していません。(調べたけどわかりませんでした)
あくまでも解決方法をまとめています。

# エラー内容
Railsアプリを新規作成し、諸々初期設定を終え、いざ`bin/rails s`してブラウザで表示すると、下記のエラー文が表示。
エラー内容は、1.You〜に書いてある通り,webpackerの設定がコンパイルしないようになっていることが原因のよう。

`javascript_pack_tag`がレイズされてるのはなぜなのか、、。
webpackerでコンパイルしない設定になっているのに、JSをwebpackerでコンパイルする記述になっているから?

Webpacker::Manifest::MissingEntryError
Webpacker can’t find application in /Users/”ユーザ名”/app/public/packs/manifest.json.
Possible causes:
1. You want to set webpacker.yml value of compile to true for your

元記事を表示

【RSpec】なぜテストを書くのか?

伊藤さんのスライドの中で「テストの品質」についてこう書かれていた。

##テストの役割
1. 安全ネットとしての役割
2. 実装の正しさを証明する役割
3. コードの品質を向上させる役割
4. 省力化ツールとしての役割
5. バグを叩き潰す役割
6. 設計を支援する役割
7. 説明書としての役割

その中でも実際にテストを書いていて、特に実感したものを所感とともに挙げていく。

##その1 バグを叩き潰す役割
バグが起きたときは**修正する前に**テストを書く。

“`
修正しちゃんと実装されたらこう動くというテストを書いて落としておく
→バグ改修
→実装が正しければテストがグリーンになる
“`

上記の手順でバグ改修を行うことで、目視だけではなく実装として正しく修正されたことの証明にもなる。
(たまに書いたテスト自体が間違っていた場合もある…)

##その2 説明書としての役割
テストは仕様書にもなる。
過去の自分や他の人が書いたコードを読み解くとき、すでに走っているプロジェクトに途中で入って各機能を理解しなくてはいけないときなどにテストを読むことでだいたいを理解するのに役立

元記事を表示

Ruby on Rails チュートリアル第8章をやってみて

#基本的なログイン機構
■第8章
基本的なログイン機構を構築していく。

##8.1 セッション
HTTPは状態のないプロトコル。HTTPのリクエスト1つ1つは、それより前のリクエストの情報をまったく利用できない、独立したトランザクションとして扱われる。

ログインするとcreateでセッションを作成して保存。
ログアウトするとdestroyでセッションを破棄。

###8.1.1 Sessionsコントローラ
ログインとログアウトの要素を、Sessionsコントローラの特定のRESTアクションにそれぞれ対応付ける。

セッションコントローラの作成。

“`rb
$ rails generate controller Sessions new
“`

リソースを追加して標準的なRESTfulアクションをgetできるようにする。
以下のコードを追記。

“`ruby:routes.rb
get ‘/login’, to: ‘sessions#new’
post ‘/login’, to: ‘sessions#create’
delete ‘/logout’,

元記事を表示

enumerizeのオプション・メソッドまとめ

enumerizeを使っておきながら便利なオプションやメソッドを活用しきれていなかったので、
備忘録も兼ねてメソッドとオプションをまとめました!

### 最もベーシックな使用方法
“`ruby
class User
extend Enumerize

enumerize :status, in: [:student, :employed, :retired]
end
“`
これだけでモデルにinclusionバリデーションが追加されます(便利ぃ)
ここから更に便利なオプションやメソッドを紹介します!

## 目次
[skip_validationsオプション](#skip_validationsオプション)
[defaultオプション](#defaultオプション)
[scopeオプション](#scopeオプション)
[multipleオプション](#multipleオプション)
[predicatesオプション](#predicatesオプション)
[_textメソッド](#メソッド)
[valuesメソッド](#valuesメソッド)
[その他(enumerizeの値

元記事を表示

Webpacker::Manifest::MissingEntryErrorへの対処法まとめ

### はじめに
Webpacker::Manifest::MissingEntryErrorが発生した際の対処法です。
個人的的に大変頭を悩ませたエラーでしたのでこちらに備忘録を残していきます。

### 対象者
下記リンクの偉大な先人達の解決策でも解決できなかった方へ

https://qiita.com/negisys/items/2bf88659f584fe45b686#rails%E3%82%92%E5%A7%8B%E3%82%81%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E3%82%89%E3%81%95%E3%81%A3%E3%81%9D%E3%81%8F%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E9%81%AD%E9%81%87

https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0

https://qiita.com/masatwork/items/1b5d190cc76f5eeffbb7

https://qiita.c

元記事を表示

OTHERカテゴリの最新記事