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

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

Rubyのバージョン変更

“`
ys@mbp ~ % rails -v
Rails 7.0.3
ys@mbp ~ % ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-darwin20]
ys@mbp ~ % which ruby
/Users/ys/.rbenv/shims/ruby
ys@mbp ~ % rbenv install -l
2.6.10
2.7.6
3.0.4
3.1.2
jruby-9.3.7.0
mruby-3.1.0
picoruby-3.0.0
rbx-5.0
truffleruby-22.2.0
truffleruby+graalvm-22.2.0

Only latest stable releases for each Ruby implementation are shown.
Use ‘rbenv install –list-all / -L’ to show all local versions.
ys@mbp ~ % rbenv install 2.7.6
To follow progres

元記事を表示

【Ruby】継承とは | 初学者向け

## はじめに
継承とはどういうことなのか。
僕はRubyを学び始めた頃にあまり理解をしていなかったので、
これからRubyを学ぼうとしている方のために簡単にここに記しておく。

## Rubyでクラスを継承する方法
### そもそも継承とは
そもそもクラスを継承するとは、Google辞書で検索すると`うけつぐこと`と表示される。
まさにその通り、ほかのクラスの内容をうけつぐことを`継承`という、らしい。

### クラスの継承 | 具体例
“` ruby
class Takeshi
def super_method
puts “スーパー!!!!!!!!!!!!!”
end
end

# Super クラスの機能(メソッド)を Sub クラスで継承(取り込む)する
class Gorira < Takeshi end # Super クラスのメソッドが利用できる p Gorira.new.super_method # => スーパー!!!!!!!!!!!!!
“`
多分こんな感じになります。

これが継承です。以上

元記事を表示

Railsフォロワーのみに通知を送る

# 概要
先日、こちらの記事
https://qiita.com/nekojoker/items/80448944ec9aaae48d0a
を参考にさせていただき、通知機能を実装いたしました。
私のポートフォリオの中で、ある宣言(announcement)を行う機能があります。その宣言を、「フォロワー全員」に通知する機能を実装しました。
自分の勉強の一環として、アウトプットさせていただいております。

# ER図
スクリーンショット 2022-10-08 21 52 41

Announcementが、私のポートフォリオで実装した宣言機能のためのモデルになります。
## 通知モデルの作成
まず、Notificationモデルを作成します。
“`
$ rails g model Notification
“`
続いて、マイ

元記事を表示

rails db:migrateが”Mysql2::Error: Duplicate column name ‘~’”で失敗した際の対応法

はじめに

実装している途中にDBテーブルに外部キーを追加する必要がありました。
いつものようにmigrationファイルを作成し、rails db:migrateを行ったところ下記のエラーメッセージが返ってきました。
~~~
~ # bundle exec rails db:migrate
Running via Spring preloader in process 1242
== 20221007040407 {migrationファイル名}: migrating ===============
— add_reference(:テーブル名, :カラム名, {:null=>false, :foreign_key=>true})
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Duplicate column name ‘{追加したかったカラム名}’
~~~

原因がよくわからず、エラー解消まで少し時間がかかったので備忘録として

元記事を表示

Ruby on Rails 部分テンプレートが開かない!!「ActionView::MissingTemplate」のエラーが出ている。。

# 1.はじめに
Ruby on Railsにて部分テンプレートを実装している最中にエラーが発生しました。
同じミスをしないよう、解決方法を記録に残しておきます。

# 2.前提条件
#### 開発環境
Ruby:ruby 3.1.2
Rails:Rails 6.1.6.1
OS:Windows11 Home

#### 実装状況
・deviceを導入し、ログイン機能実装
・ゲストログイン機能実装
・投稿機能実装(投稿一覧、投稿詳細ページ作成)
・会員詳細画面実装
・コメント機能実装
・コメント機能の非同期通信 ←今ココ

#### やりたいこと
コメント機能を非同期通信にするために、まずはコメント投稿フォームとコメント一覧をそれぞれ部分テンプレート化したい。

# 3.エラーメッセージの内容

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823804/e74ec9b8-705c-d699-aceb-8cae21ce344e.png)

元記事を表示

モジュールのミックスイン

# 複数のクラスに同じような機能が必要な場合
is-aの関係になくても複数のクラスにまたがって同じような機能が必要になるケースは存在します。

## 継承の使用を避ける場合にモジュールを使う
製品は“`ユーザであるまたはユーザーは製品であるという関係が(is-aの関係)が成り立たない“`のであれば、“`継承の使用は避ける“`べきです。
その時に“`モジュール“`を使う。

# モジュールのメソッドはどんなクラスにも使える
“`モジュールに定義したメソッド“`をProductクラスでもUserクラスでも呼び出すことができました。
モジュールをクラスに“`include“`して機能を追加することを“`ミックスイン“`という。

“`ミックスイン先のクラスは基本的にどんなクラスでもOK“`

# ミックスインのもう一つの方法
モジュールをクラスにミックスインするもう一つの方法として“`extend“`がある。
モジュール内のメソッドを“`そのクラスの特異メソッド(つまりクラスメソッド)にする“`ことができる。

# 出典
https://ruby-book

元記事を表示

西暦の年数および月を入力し、その月の日数を求めるプログラムの備忘録

今日も学んだことを忘れない為にメモします。

## プログラム内容
西暦の年数および月を入力し、その月の日数を求めるプログラムを書く。
その場合、閏年について考慮する必要がある。

閏年は以下の判断基準で決まります。

①その西暦が4で割り切れたら閏年である
②ただし、例外として100で割り切れる西暦の場合は閏年ではない
③ただし、その例外として400で割り切れる場合は閏年である

“`
1990年2月 =>”1990年2月は28日間あります”
2000年2月 =>”2000年2月は29日間あります”
2100年2月 =>”2100年2月は28日間あります”
2000年3月=>”2000年3月は31日間あります”
“`

## 記述内容
“`
def get_days(year, month)
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if month == 2
if year % 4 == 0
if year % 100 == 0 && year % 400 != 0

元記事を表示

[Rails] ヘルパーメソッドのlink_toを用いたときのclassの書き方

# .htmlでのclassの書き方
“`html:hoge.html

HOGE

“`
# .html.erbでのclassの書き方
“`erb:hoge.erb
<%= link_to 'HOGE', root_path, class: "hoge" %>
“`
※root_pathのところは遷移させたい場所です。

元記事を表示

[Rails] トップページへのルーティングの設定方法

# ルートパスの記述方法
“`ruby:config/routes.rb
root to: ‘コントローラー名#アクション名’
“`
これでトップページを表示できます。
例 :
“`ruby:config/routes.rb
Rails.application.routes.draw do
root to: ‘schedules#index’
end
“`
上記の例では、schedulesコントローラーのindexアクションに遷移するという意味になります。

# viewでの使用例
“`erb:layous/application.html.erb

<%= link_to "SCHEDULE", root_path %>


“`

元記事を表示

クラスの継承

DVDクラスがProductクラスを継承するとき、Productクラスのことを継承する時に
ProductクラスのことをDVDクラスの“`スーパークラス(または親クラス)“`と呼ぶ。
DVDクラスのことをProductクラスの“`サブクラス(または子クラス)“`と呼ぶ。

# クラス図
クラスの継承関係を図解するときは、クラス図と呼ばれる図を使う。

### クラス図を紹介
https://cacoo.com/ja/blog/how-to-write-class-diagram/

このクラス図のように
サブクラスからスーパークラスへ向かって矢印を伸ばしている。

# 継承の注意点
スーパークラスの機能を全部引き継ぐための仕組みと見なされる場合がある。
それは誤解だ。
“`継承は機能ではなく、性質や概念の共通点に注目“`する。

## 性質や概念が共通しているかを知るための方法
“`サブクラスはスーパークラスの一種“`である。(“`サブクラス is a スーパークラス“`)と声に出して読んだ時に違和感がないかを確かめることです。
これは“`is-aの関係“`

元記事を表示

[Rails] Prefixの使い方

# 1.まずPrefixとは

URLに代わりの名前を付けて変数化したものです。

# 2.使い方

ターミナルで rails routes とコマンドを入力すると、以下のように表示されます。
“`bash
Prefix Verb URI Pattern
Controller#Action
tops GET /tops(.:format) tops#index
POST /schedules(.:format) schedules#create
new_schedule GET /schedules/new(.:format)

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlのビット演算の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,Perlのビット演算の比較

# Python

https://qiita.com/7shi/items/41d262ca11ea16d85abc

# Ruby

https://qiita.com/jkr_2255/items/8e29dce1999f3f6b69ad

# PHP

https://qiita.com/mpyw/items/ce626976ec4dc07dfec2

# Java

https://qiita.com/Ingward/items/43acda931c8a62c70d2f

# JavaScript

https://qiita.com/41semicolon/items/c1a16f220d4545410ddc

# Perl

https://perlzemi.com/blog/200808061

元記事を表示

Rubyの繰り返し処理まとめ(+ Rails)

# map

– 各要素に対してブロックを評価した結果を新しい配列にして返す
– 繰り返し処理の結果を配列にしたいときに使う

“`rb
cards = %w[spade heart diamond clover]
new_cards = cards.map(&:upcase) # [“SPADE”, “HEART”, “DIAMOND”, “CLOVER”]
“`

# each
– 配列の要素を最初から最後まで繰り返す
– 取り出した要素の扱い方はケースバイケース

“`rb
cards = %w[spade heart diamond clover]
cards.each do |card|
card.upcase! if card.eql?(‘heart’)
p card
end
“`

“`terminal
“spade”
“HEART”
“diamond”
“clover”
“`

# each_with_index
– 要素とそのインデックスをブロックに渡して繰り返す

“`rb
cards = %w[spade heart diamon

元記事を表示

多対多(グループとユーザー)のRspecで躓いた箇所の備忘録

# 概要
ポートフォリオ作成で、多対多のモデルが絡むRspecを書いていたときに躓きました。その時の解決策を備忘録として書き留めています。

こちらの記事を参考にさせていただきました。
https://t1gerk1ngd0m.hatenablog.com/entry/2019/08/24/233047

#### 開発環境
– OS:Amazon Linux2
– Rails 6.1.6.1

# 背景
マイページで、「自分が参加しているグループの一覧が表示される」というテストを書く際、「グループに所属しているユーザーの数」という記述をする必要がありました。グループとユーザーは、下記に示すように多対多となっており、中間テーブルを考慮した記述をする必要がありました。
![pf_ER-ページ5 drawio](https://user-images.githubusercontent.com/106591130/194531248-e551cb72-2529-41b8-854f-8313544918dd.png)

# 解決策
まずは、group_spec.rbのテスト部分に、Use

元記事を表示

Rails indexのおかげでdb:migrateができなかった話

# はじめに
テーブル作成の際に
~~~
rails db:migrate
~~~
を実行したのにも関わらず、次のようなエラーでテーブルが作成されないという事象がありました。
~~~
ArgumentError: Index name ‘index_long_long_long_long_long_long_long_tests_on_long_long_long_user_id’ on table
‘long_long_long_long_long_long_long_tests’ is too long; the limit is 64 characters
~~~
index名が長すぎるというエラーでした。
しかし、異なる部分でも時間を溶かしてしまったので備忘録として残したいと思います。
いつものようにおかしな点や誤っている点はご指摘お待ちしています!

# 環境
ruby 2.7,1
rails 6.0.5

# indexとは
今回のテーブル設計では、「そもそもindexってなんっちゃか?」というところからのスタートでした。
こちらの記事がわかりやすかったです。

http

元記事を表示

Rails7でimportmapを利用してflatpickrを導入後、日本語に対応する

importmap+flatpickrの情報はあったけど、Localeを設定する情報がなかったので記録しておく。

Rails 7, importmaps, Stimulusは導入済みとする。

↓importmapでpinする
“`
$ ./bin/importmap pin flatpickr
$ ./bin/importmap pin flatpickr/dist/l10n/ja
“`

↓こんなのが出来上がる。
“`config/importmap.rb
pin “application”, preload: true
pin “@hotwired/stimulus”, to: “stimulus.min.js”, preload: true
pin “@hotwired/stimulus-loading”, to: “stimulus-loading.js”, preload: true
pin_all_from “app/javascript/controllers”, under: “controllers”

pin “flatpickr”, to: “http

元記事を表示

kombi servisi

https://www.hemengeliriz.com/mersin-kombi-servisi

元記事を表示

Deviseのデフォルトバリデーション

# はじめに
こちらは、deviseにてデフォルトでかかっているバリデーションを忘れないために記載。

## バリデーションの種類
以下の項目に関しては、モデルで新たにバリデーションを実装する必要はない。
(Deviseにデフォルトでバリデーションが備わっているため)。
・メールアドレスが必須であること。
・メールアドレスが一意性であること。
・メールアドレスは、@を含む必要があること。
・パスワードが必須であること。
・パスワードは、6文字以上での入力が必須であること。
・パスワードとパスワード(確認)は、値の一致が必須であること。

元記事を表示

投稿一覧画面からlink_toで会員詳細画面遷移しようとした際、開ける画面と開けない画面があり、開けない画面では「Couldn’t find User with ‘id’=6」のエラーが出ている

# 1.前提条件
#### 開発環境
Ruby:ruby 3.1.2
Rails:Rails 6.1.6.1
OS:Windows11 Home

#### 実装状況
・deviceを導入し、ログイン機能実装
・ゲストログイン機能実装
・投稿機能実装(投稿一覧、投稿詳細ページ作成)
・会員詳細画面実装 ←今ココ

#### やりたいこと
投稿一覧画面にて投稿者の名前をそれぞれ押下すると、その会員の会員詳細画面へ遷移するようにしたい。

#### 発生している事象
投稿一覧画面にて投稿者の名前をそれぞれ押下すると、開ける画面と開けない画面がある。
そして開けている画面は開きたい画面になっていない。
また開けない画面についてはエラーが発生している状況。

# 2.エラーメッセージの内容

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823804/2bfaab10-af5b-6619-633f-088a3b7a6f28.png)

####

元記事を表示

Leetcode 解いてみた 1480. Running Sum of 1d Array

1480. Running Sum of 1d Array
Rubyを勉強中なのでRubyで解きました。

問題
Given an array nums. We define a running sum of an array as runningSum[i] = sum(nums[0]…nums[i]).
Return the running sum of nums.

例1
Input: nums = [1,2,3,4]
Output: [1,3,6,10]
Explanation: Running sum is obtained as follows: [1, 1+2, 1+2+3, 1+2+3+4].

例2
Input: nums = [1,1,1,1,1]
Output: [1,2,3,4,5]
Explanation: Running sum is obtained as follows: [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1].

例3
Input: nums = [3,1,2,10,1]
Output: [3,4,6,16,17]

元記事を表示

OTHERカテゴリの最新記事