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

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

【Rails】コメントの編集, 削除機能実装(form_with)

# はじめに
記事投稿アプリの記事に対して、コメントを作れる機能を実装した。
さらに、編集と削除ができるようにしたい。

**完成図**
![完成図.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2684787/617104a7-bfca-fd77-79d2-521bd15ec3a7.gif)

# 前提
下記は作成済み
投稿機能
ユーザーテーブル
コメントテーブル
コメントコントローラー createアクション

下記テーブルは作成済み。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |

# ポイント

・コメント投稿機能とeditテンプレートを同じパーシャルを適用することで、dryにする。
・post_

元記事を表示

Ruby 練習問題5 ~ if → unlessへの書き換え ~

こんにちは、プログラミング初学者”fujitacoma”です!

今回は、Ruby練習問題シリーズの5回目です。
unless文を使用した条件式の記述問題ですね。

それでは早速始めます!

# 問題
次のif文をunlessというメソッドを用いて書き換えてください。

“`ruby
if a + b > 0
puts “計算結果は0より大きいです”
end
“`
## ヒント
### unless
unlessとはifとは逆で、条件式がfalseの場合に処理が実行されます。

__ifを使用した場合__
“`ruby
if 条件式
条件式がtrueの時に実行する処理
else
条件式がfalseの時に実行する処理
end
“`
__unlessを使用した場合__
“`ruby
unless 条件式
条件式がfalseの時に実行する処理
else
条件式がtrueの時に実行する処理
end
“`

# 解答と解説

### 模範解答
“`ruby
unless a + b <= 0 puts "計算結果は0より大きいです" end ``` ###

元記事を表示

Ruby 二重ハッシュの取り出し

以下のようなuser_dataがあり

“`
user_data = [
{user: {profile: {name: ‘George’}}},
{user: {profile: {name: ‘Alice’}}},
{user: {profile: {name: ‘Taro’}}},
]
“`

ターミナルの出力結果が以下のようになるようにコーディング

“`
George
Alice
Taro
“`

# 回答

“`
user_data = [
{user: {profile: {name: ‘George’}}},
{user: {profile: {name: ‘Alice’}}},
{user: {profile: {name: ‘Taro’}}},
]

user_data.each do |u|
puts u[:user][:profile][:name]
end
“`

ハッシュから値を取得するときは取得したい値のキーを指定するという決まりがあったが、今回取り出したいのはnameなのでnameまで連続して指定する。
配列の中にハ

元記事を表示

google-cloud-firestore v2.7.0 はぶっ壊れている

# 2.7.1が出たみたい

https://rubygems.org/gems/google-cloud-firestore/versions/2.7.1

# 問題

https://github.com/googleapis/google-cloud-ruby/issues/18832

“`rb
firestore = Google::Cloud::Firestore.new
doc = firestore.doc(“test/test”)
doc.set(foo: 123)
doc.get.fields
# => {“foo”=>{:null_value=>:NULL_VALUE, :boolean_value=>false, :integer_value=>123, :double_value=>0.0, :timestamp_value=>nil, :string_value=>””, :bytes_value=>””, :reference_value=>””, :geo_point_value=>nil, :array_value=>nil, :map_value=

元記事を表示

【Rails】フォロー・フォロワー機能

# 開発環境
Rails 6.1.4
ruby 2.6.3

# 前提条件
– devise導入

# 目次
– モデルの作成
– アソシエーション
– メソッドの作成
– コントローラー作成
– ルーティング
– View作成

## モデルの作成

まずはRelationshipモデルを作成します。
RelationshipモデルはUserモデルの中間テーブルにあたります。
なぜなら、フォローするのもフォローされるのもユーザーで、`多 対 多`の状態になるからです。

カラムは、下記の通り定義します。

`follower_id` : フォローしたユーザー
`followed_id` : フォローされたユーザー

ここで`user_id`を使わないということが大切です。
RelationshipモデルはUserモデルの中間テーブルになるため、
どちらもidにはユーザーのidが入ります。
つまり、ここで`user_id`を使用してしまうと
判別がつかなくなってしまうため、`user_id`は使用しません。

それでは、ターミナルでコマンドを実行していきます。

“`ruby:ターミ

元記事を表示

仮想環境VirtualBox(Ubuntu20.04)でRails環境構築

# 概要
テキストを見ながらRails環境を構築しようとしたら
サーバー起動までの所で色々ハマってしまったので自分用に記録しておきます。
windows10 VirtualBox6.1 ubuntu 20.04 で構築しました。
windowsからubuntuへのコピペ機能を使える様にしてから始めると楽です。

# 参考にした書籍
[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=217OVEDAHL3SK&keywords=rails&q

元記事を表示

マイグレーションファイルを修正する方法

– アプリ制作途中にマイグレーションファイルの修正が必要になった。なんとか修正することができたので忘備録として記事にします。
## 経緯
– `ログイン機能`を実装するため`devise`をインストール
– 不要な機能をコメントアウトし忘れ`rails db:migrate`を実施。
– 実施後に不要な機能を削るため`マイグレーションファイル`の修正に取り掛かる。

まずは`マイグレーションファイル`の修正について検索し、次のコマンドを実施
“`:ターミナル
rails db:rollback
“`
すると以下の様にエラーが発生
“`
Running via Spring preloader in process 89570
== 20220715104214 AddDeviseToUsers: reverting =================================
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Active

元記事を表示

hashの復習

# 初投稿

プログラミング学習の備忘録として初めてみた。

# ハッシュの基礎の問題

“`
puts hash.keys
puts hash.values
“`
上記のメソッドを実行した時に

“`
one
two
three
1
2
3
“`
とターミナルに表示されるような変数hashを作成するためのコードをシンボルを使って記述してください。

# ハッシュとは
データとそれに対応する名前のセットを要素としてもつ値。
データがvalue,対応する名前がkey。

キーバリューストア
key:User1 → value:Mike

ハッシュではシンボルがキーとして用いられることが多いが、それは文字列でも数値として扱われて、コンピュータの速度が速くなるから。かつ文字列としての役割も果たせるしハッシュロケットの書き方よりも記述量も少なくていいということからシンボル型の書き方が多い。

# 回答
“`
hash = { one: 1, two: 2, three: 3}

puts hash.keys
puts hash.values
“`

ハッシュのキーを取得す

元記事を表示

[Ruby] 複数行テキストのセル・空白行が含まれるCSVから正確な件数を取得する

# 背景
以下のようなシステムの作成中に、登録件数が正確に通知されないことがあった。
* CSVファイルからデータベースにデータを登録したい
* 1行につき1件として、複数行のCSVファイルを読み込む
* データがCSVからデータベースに登録されたら、登録件数を取得してSlackで管理者に通知する

# 問題
以下を参考に、`.count`で`”\n”`の数で改行をカウントして行数を取得していたが、
登録件数が倍になって通知されることがあった。
https://rubytips86.hatenablog.com/entry/2014/03/23/091949

# 原因
* 複数行のセルがあると、セル内の`\n`もカウントされてしまう
* 空白行があると件数としてカウントされてしまう

# 解決法
csvfile: 件数を取得したいCSVファイル
row_size: CSVファイルの列数
“`ruby
column_length = File.read(csvfile).gsub(/,{#{row_size-2},}\r\n/,”).scan(“\r\n”).length
“`

元記事を表示

Ruby3.1を触ってみる(debug)

# 0. はじめに

[Ruby 3.1](https://www.ruby-lang.org/ja/news/2021/12/25/ruby-3-1-0-released/) がリリースされ半年が経ちましたが、なかなか深くまで触れていないので手を動かしながらリリース内容を要所で見て所感を綴ろうかなと思います。

今回は 新規のデバッガー debug gemです。
既存でもデバッガー自体はありましたがそれと比較してみようかと思います

# 1. リリースノートを見てみる

> デバッグ時の速度低下を極力生じないよう改善
リモートデバッグのサポート
リッチなデバッガフロントエンドに対応(現在 VSCode と Chrome ブラウザに対応)
マルチプロセス、マルチスレッドプログラムのデバッグに対応
カラフルな REPL
そのほか、Record & Replay 機能やトレース機能など、様々な便利機能

Rubyにはこれまでも lib/debug.rb が同梱されていましたが、あまりメンテナンスされておらず、性能や機能に問題がありました。debug.gem はこれを完全に置き換えます

元記事を表示

mysqlやAWSの本番環境に接続しようとした時、Permission denied (publickey)

## 原因
githubの公開鍵を過去に誤って変更してしまっていたから。

## 解決までの流れ
### ①公開鍵を保存してる場所を確認
github公開鍵は/Users/****_****/.ssh/id_rsaのパスを合わせる。

以下のコマンドを打って、pwdで.sshのパスを確認する。

“`
ls ~/.ssh
cd ~/.ssh
pwd

pwd => /Users/****_****/.ssh
“`

実際にパスを設定する。
以下のコマンドで中身を見る。
“`
vim ~/.ssh/config
“`
IdentifyFillの表記が確認できる。
先ほど確認したパスをそれにつづけて書き保存する。
“`
IdentifyFill /Users/****_****/.ssh/id_rsa
“`

ここまでで設定はOK

### ②公開鍵がしっかり設定されているか確認した
以下のコマンドで公開鍵が見れる。
“`
vim ~/.ssh/id_rsa.pub
“`

ここで公開鍵を確認したところ、過去に誤って、公開鍵を変えていたことが判明。

新しく公開鍵を設定し

元記事を表示

map(&: ~ )の(&:)とはなんなのか

# map(&: ~ )の(&:)とはなんなのか
こんにちは。
今日は、AtCoderを解いていて、よく見かけたmap(&:~)とはなんなのか調べたので、備忘録くらいの感覚で書いていきたいと思います。

## mapメソッドとは
まず初めにmapメソッドとは。

[公式リファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/collect.html)より
>各要素に対してブロックを評価した結果を全て含む配列を返します。
>
> すべて 3 倍にした配列を返す
 p (1..3).map {|n| n * 3 } # => [3, 6, 9]

とのことで、この例題を見るとわかりやすいですよね。
mapのあとにあるブロックを1、2、3に適応していく。
このような使い方だと自分でも使えそうです。

しかし、AtCoderでよく見るのは、入力に対してmapメソッドを使う場面です。
よくある問題の入力値の獲得方法として、
`入力
“12 3″`
`結果 a= 12 b = 3`
のように複数の値の獲得をスペー

元記事を表示

request spec 以外でも `get` や `response` を使うには

結論から言うと以下のように呼び出すことが出来ます。
バージョンは rspec (3.11.0) です。

“`ruby
RSpec.describe MyClass do
let(:integration_test) { ActionDispatch::IntegrationTest.new(nil) }
context do
it do
integration_test.get(‘/path/to’)
expect(integration_test.response.status).to be 200
end
end
end
“`

Request spec 以外のクラスのテストでどうしても API を呼び出した結果のレスポンスが欲しい場合、どうやって呼び出すか調べてみました(そもそもそういうテストは書くべきでないという話は置いといて)。

Request spec 内で `binding.pry` して止めてみます。

“`ruby
RSpec.describe MyController, type: :reque

元記事を表示

Classが理解できない、難しい人のために

## この記事を書いた理由
私はエンジニアの学習を始め、一通り文法を勉強しましたが
Classの意味が本当にわからなかったです。
わからない原因をずーっと考えていましたが、自分なりの答えにやっと辿り着きました。
それは『Classの概念がなぜ必要かわからない』というところでした。
## 覚えておいた方が良い前提条件
Classの説明に関してはあらゆるところで見ると思います。
よく見るのが
Classとはモノの設計書です。
Classとは概念です。
Classはインスタンスを生成してから使います、、
そしてこんな設計図をみます、、
![スクリーンショット 2022-07-15 11.25.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/714631/a74d3795-ce77-41f6-5134-865cafda26bb.png)

こんなこと書かれてあーなるほどね。そう理解する人はごく少数だと思います

そこで、知っておくべきこととして大事なことですが
*アプリケーションは何百ものソースコードの集合

元記事を表示

【Ruby】0埋めに失敗するケースについて

# はじめに
Rubyの0埋め処理においてエラーが発生したので、原因と対応策を備忘として残しておきます。

# エラーになる場合がある0埋め処理
“`
# 月を0埋めして2桁にしようとした
# monthには「09」と言う文字列が設定されていた
val = sprintf(‘%d/%02d/01’, year, month)
“`
# 結果
“`
invalid value for Integer(): “09” (ArgumentError)
“`
【原因】
Rubyに限ったことではないが、整数リテラルの前に0があると8進数と認識されることがある。
(「されることがある」としているのは使用する関数や前後の処理で変わってくるため。)
今回の場合、「09」を8進数と認識され、8進数で9は存在しないよ!といった感じでエラーになった。

【対応策】
“%02d”の部分に文字列を渡さず、整数化してから渡す。
“`
val = sprintf(‘%d/%02d/01’, year, month.to_i)
“`

# おわりに
8進数では8も使用できない。
扱える数値は各々調べてみて

元記事を表示

Rails CRUD処理実装のアプリを立ち上げ~Git hub管理まで

アプリを作成する度に未だに毎回検索しているのでここの復習も兼ねてまとめます。
プログラミング初心者向けの記事となります。

# 開発環境
– `Rails`
– `Ruby`
– `git`
– `Git hub`
# 手順
– `Rails`でアプリ作成
– `git`で`ローカルリポジトリ`を作成
– `Git hub`で`リモートリポジトリ`を作成
– `ローカルリポジトリ`に`リモートリポジトリ`を追加する
# まずはRailsでアプリを作成
“`:ターミナル
rails _6.1.6_ new アプリ名 -d postgresql -T
cd アプリ名                                                                     
rails db:create
“`
### コマンドの解説
__Q:なぜ`Rails`のバージョンは`6系`指定?__
A:最新の`Rails`のバージョン`7`はまだ出たばかりで不具合などあり,変更点も多々あるため`6系`最新バージョンを指定しています。

__

元記事を表示

rails環境構築の全体像と、各ツール・コマンドの意味、役割について〜Command Line Tools for Xcodeとhomebrewとrbenvとrubyとbundlerとgemとrailsと…!〜

railsの学習を始めて数ヶ月経ちましたが、環境構築について、写経のように何も理解できないまま行ってしまっていたので、各ツール、プログラムの全体での立ち位置を意識しながら、それぞれがどの立場で何をやっているのか、またその中で感じた疑問をまとめてみました。

初学者の方が環境構築するにあたって、今何をしているのかわかる地図のようになればいいなぁと思っております。
誤り等にお気づきの方はご連絡をお願いいたします。

■想定読者
①:複数回環境構築を行い、やり方はわかったが、何をしているのか分からない初学者の方々
②:まさに①である筆者の拙い記事を、温かい目で校正していただける先輩エンジニアの方々

# 全体イメージ
※あくまで環境構築の一例。
(例えば、rbenvがなくてもrubyのインストールはできるし、bundlerがなくてもgemのインストールは可能。)
### イメージ図
![全体イメージ_rails環境構築.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710784/5c01e0aa-dbc

元記事を表示

raise_conflict_error enumに定義できない命名について

## 経緯
`Ruby on Rails`でアプリ作成中にenumでこのような定義し、`rails c -s`で動作確認をしたところエラーが発生しました。
今回の記事ではこのエラー発生原因と解決方法までを残します。同じプログラミング初心者へのヒントになれば幸いです。
“`rb:model
class Present < ApplicationRecord with_options presence: true do validates :present_name validates :present_score validates :present_review end enum present_score: { poor: 1, average: 2, good: 3, verygood: 4, excellent: 5 } end ``` ```:ターミナル ~~~省略~~~~ `raise_conflict_error': You trie

元記事を表示

100日後くらいに個人開発するぞ!day057

## 今日は継承を学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/0d95f7fb-14cd-a3ab-8a5c-9c498f3157da.png)

## 今日の学び

### 継承
* 継承とはあるクラスを元にして新たなクラスをつくること
* `class 新しいクラス名 < 元にするクラス名`で他のクラスを継承できる * 新しいクラスを「子クラス」、元にするクラスを「親クラス」と呼ぶ * 継承すると親クラスのインスタンス変数やインスタンスメソッドを小クラスでも使える ### 子クラスにインスタンス変数を追加する * `attr_accessor`を用いると子クラスにインスタンス変数を追加することができる

元記事を表示

みんな大好きリーダブルコードまとめ①

# 対象者
当方と同じく、駆け出しエンジニアの皆様。また、初級エンジニアの方もこんな内容だったなと思いながらお読みいただければ幸いです。
※当方、駆け出しエンジニアですので間違いやご指摘あれば、コメントいただければ幸いです。

# リーダブルコードとは?
駆け出しエンジニアや、初級エンジニアの方々のバイブル的書物。
以前、エンジニアの方とお話しさせていただく機会がありやはりこちらの本は読んでおいて損はないとのことで、購入して少しずつ読み進めていこうと考えています。

# 第1章 理解しやすいコード
#### メインテーマ
本章のメインメッセージは、『良いコードとは、ただ簡潔に書けば良いということではなく、共通認識しやすいコード(著書の中では、「安心」と言われる)が良いコードなんだよ〜。』と4ページほどで説明してくれています。

#### ディテール
具体的な例で話すと、本章には動作が同じコードを2種類記載されています。
一方は2行ほどで記述されているがエンジニアの直感で書かれたコードで読めなくはないが、どのような動作が行われるのかを理解するには少し時間がかかります。
他方、7行のある一

元記事を表示

OTHERカテゴリの最新記事