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

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

ruby returnの返り値が複数の場合

はじめに

メソッド内の処理後、返り値が複数になる場合はどうなるのか気になったので調査し、検証してみました。

returnを使わない場合の返り値

“`test.rb
def return_test(value)
sum_a = 5
sum_b = 10
sum_c = 15
sum_a *= value
sum_b *= value
sum_c *= value
end

value = 10

x = return_test(value)

puts x
“`
結果
“`
=> 150
“`
:::note warn
メソッドの最後の処理結果しか返ってこない
:::

returnで返り値を複数指定した場合

“`test.rb
def return_test(value)
sum_a = 5
sum_b = 10
sum_c = 15
sum_a *= value
sum_b *= value
sum_c *= value
return sum_a,sum_b,su

元記事を表示

rails ヘルパーメソッドを使ってviewファイルを整える

はじめに

ヘルパーメソッドを自分で定義することについて学んだので学習したことをまとめて記述していきます。

ヘルパーメソッドを使うメリット

railsでビューファイルに対して行われる処理に関して繰り返して使用するようなメソッドはヘルパーメソッド(ビューファイルに対して使用するモジュール)を自分で定義して使用するとビューファイルの可読性を良くすることができ、また保守などの面から見ても修正しやすくなるメリットがある。

___
メッセージの投稿機能があるWEBアプリケーションでそのメッセージを一覧でメッセージテキストと投稿者を表示したい時などを想定してビューファイルを下記のように作成した場合

:::note warn
ヘルパーメソッド使用前
:::
“`app/views/messages/index.html.erb

<%= @messages.each do |message| %>
<%= message.text %>
<% end %>

“`

:::note i

元記事を表示

【Rails】初学者向け_基礎のみを活用しチャット機能を作る方法

## 1.バージョンを確認しましょう!

Rails 5.1.6
ruby 2.7.2p112

## 2.完成イメージ

ログイン済みのユーザーで一つのチャットルームを共有し、交流できる機能です。
同じ名前のグループは作成できないようにしてあります。
ぜひclosedな環境でグループを作成し、お話してみてください(^_^)v

## 3.実装の大きな流れ

>1.グループチャット機能に必要なModel、Controller、Viewの実装
>2.グループ系モデルとUserモデルの紐付け
>3.ちょっとしたフロントエンドデザイン

ちなみにUserモデルは既に作られている前提で記事を書いています。
筆者はdeviseというgemを使ってUser周りを整えております。

ちなみに本記事はこのような目次で進んで行きます!
一緒に楽しんでいきましょう ᕙ( ˙꒳​˙ )ᕗ

## 4. 必要ファイルを作成しましょう

“`ターミナル
$ rails g controller groups #groups_controller.rbを作成
$ rails g controller cha

元記事を表示

【Rails】お問合せフォームの実装

こんにちは!
この記事では、railsで **「お問い合せフォーム」** を実装していきます!
これは、お問い合せフォームを送信すると、設定したメールアドレス宛にお問い合せ内容が送信される機能です。

# ゴール
railsで「お問い合せフォーム」を実装し、gmailにお問合せ内容が届くようにすること。

### 完成イメージ1 (お問合せフォーム)
![スクリーンショット 2022-07-17 1.13.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820462/7f56cc29-f213-c206-476d-8734af657f77.png)

### 完成イメージ2 (設定したGmailにお問合せが届く)
![スクリーンショット 2022-07-17 1.19.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820462/189dc51a-1d31-8753-52f8-8de308853cfc.png)

元記事を表示

Method#to_procを利用して、ブロックを省略する方法

以下の`&method`部分の意味が分からなかったので調べてみました。

“`ruby
[‘foo’, ‘bar’, ‘baz’].each(&method(:puts))
“`

今回理解したいコードはこちらです。

“`ruby
class Hoge
def positive_even_list
even_filter(list)
.then(&method(:positive_filter))
end

def list
[10, -5, 0, 21, -30]
end

def even_filter(list)
list.filter(&:even?)
end

def positive_filter(list)
list.filter(&:positive?)
end
end

Hoge.new.positive_even_list
# => [10]
“`

## まとめ

– Procオブジェクトの前に`&`プレフィックスをつけると、ブロックとして扱われる
– Procオブジェクトでは

元記事を表示

初めてのRailsチュートリアルに挑戦!第4・5章

# 第4章の学習内容
1. 組み込みヘルパー
1. カスタムヘルパー
1. 文字列
1. オブジェクトとメッセージ受け渡し
1. メソッドの定義
1. titleヘルパー、再び
1. 配列と範囲演算子
1. ブロック
1. ハッシュとシンボル
1. CSS、再び
1. コンストラクタ
1. クラス継承
1. 組み込みクラスの変更
1. コントローラクラス
1. ユーザークラス

# 第5章の学習内容
1. ナビゲーション
1. BootstrapとカスタムCSS
1. パーシャル(partial)
1. アセットパイプライン
1. 素晴らしい構文を備えたスタイルシート
1. Contactページ
1. RailsのルートURL
1. 名前付きルート
1. リンクのテスト
1. Usersコントローラ
1. ユーザー登録用URL

# 学習を終えて
第4章ではRailsでありながら、以前学習したRubyの基礎を学ぶような内容であった。テキストや動画の通りに進めることで、解決できないエラーも発生しなかったので、学習しやすかった。
第5章ではwebページのレイアウトの学習であったため、HTM

元記事を表示

就活生のAtcoder奮闘記〜学習編〜

初めまして見習い駆け出しエンジニアです。

現在大学三年生です。データエンジニアとして長期インターンをさせていただきながら日々技術を磨いている次第です。これからとにかくアルゴリズムを勉強してatcoderの赤色を!と言いたいところですが、現在灰色の私には遠い未来ですので、まずは緑色を目標に(緑も難易度高い)アルゴリズムを勉強していきたいと思います。普段はc言語とrubyを主に使っているのですが、競プロではc++を使うと勉強がしやすいためまずはc++を軸に勉強していこうと思います。

まずこれから使っていく教材

・問題解決のための「アルゴリズム*数学」が基礎からしっかり身に付く本
・atcoderのc++の基礎文法

この二つを一周するだけでまずどれほど太刀打ちできるのかを試してみようと思います。

8/20までに教材を終わらせてからその次のatcoderの大会に挑戦してみようと思います。

よろしくお願い致す。

元記事を表示

配列内の数字の合計(同じ数字を除く)

# はじめに
2回目の問題だったのに解けなかったので、学習の復習のために投稿します。
回りくどくなるかもしれませんが、できるだけ自分の言葉で説明できるようにするつもりです。

# 環境
ruby 2.6.5

# 問題
3つの数字が格納された配列が与えられています。
この配列に格納された数字の合計値を出したいのですが、条件として、配列内で重複している数字に関しては除くことが求められています。

“` ruby
def lone_sum(ary)
# 処理を記述
end
# 呼び出し例
lone_sum([1, 2, 3])
“`

# 考え方
以下の手順で考える
1. 配列内で重複する数字があるかを確認する
2. 重複数字を除いたユニークな配列を作る
3. ユニークな配列に格納された数字を合計する 

## 1. 配列内で重複する数字があるかを確認する
配列に格納された数字をa, b, cとします。
まずはaの数字に対して、それぞれの配列内の数字を比較して同じかどうかを確かめます。
同じ場合にはカウントが上がるようにします。
例えば、aとa、aとb、aとcの数字を比較してカウン

元記事を表示

【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`
のように複数の値の獲得をスペー

元記事を表示

OTHERカテゴリの最新記事