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

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

has_manyとbelongs_toを完全に理解した。

最近railsチュートリアルを完走した22卒エンジニア(男)です。railsのアソシエーションについてです。

railsチュートリアルでhas_many、belongs_toを理解した(つもりだった)のですが実務で全く使いこなせませんでした。で、改めて勉強して**初学者が理解しやすいような表現**がなんとなく分かった気がしたので記事に残します。

※ 私の表現が間違っていたりすることもあるかもしれませんのでその際はご指摘いただければ幸いです。

# 対象者
– has_many、belongs_toが既存の記事であまり理解できない。
– 私のようにhas_many、belongs_toを完全に理解した(つもりの)人

# has_many、belongs_toの正体
## 公式リファレンス
まずrailsガイドの[has_many](https://railsguides.jp/association_basics.html#has-many%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91:~:text=%E3%81%AB%E3%81%AA%E3%82%8A

元記事を表示

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

## 今日は総合問題を解いてみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/beea3a45-205a-d32c-9bda-79e0771f72a3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/53f05493-88f2-9be4-7541-7599ba1bdd16.png)

## 今日の備忘録

### ハッシュが値の配列でeachを使う場合
* ハッシュが値の配列でeachを使うと指定した変数にハッシュ要素が順番に代入される
* 例:usersをuserに代入してnameキーのみ出力したい場合
* `users=[`
* `[name:”Yamada”,age:21]`
* `[name:”Tanaka”,age:24]`
* `]`
* `u

元記事を表示

アンカーとエイリアスを使っているYAMLの処理がfedora 36?で失敗

備忘

# 発生事象

以前は動いていた vagrant up が失敗。

“`
$ vagrant up
Vagrant failed to initialize at a very early stage:

There was an error loading a Vagrantfile. The file being loaded
and the error message are shown below. This is usually caused by
a syntax error.

Path: /foo/bar/molecule/default/Vagrantfile
Line number: 0
Message: Psych::BadAlias: Unknown alias: platform
“`

# PD

PDの結果、YAMLファイルから情報を読み取って使用していたVagrantfileが失敗するようになっていた。

具体的には以下の樣なYAML.load_file箇所が失敗。

“`ruby
require ‘yaml’
foo = YAML.lo

元記事を表示

対象となる文字列からn番目の文字を削除するメソッド

任意の文字列の先頭からn番目の文字を削除するメソッドを紹介します。

例えば下記のように郵便番号111-1111を入力するが間のハイフンを削除して出力したいときなど削除したい文字が何番目にあるかわかっている時などを想定した時

“`
def address(number)
number.slice!(3)
puts number                 #1111111が出力されて”-“が削除されている
end

number = “111-1111”
address(number)
“`

slice!の後ろの()内は配列と同じように0から始まる数字を入れます!

:::note info
slice!メソッドは配列や文字列から指定した要素を削除して返します
:::

元記事を表示

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

## 今日はnilとハッシュの配列を学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/f74c101b-4ae7-bcd9-c489-dea43ffe6351.png)

## 今日の学び
### nil
* nil:「何もない」という意味の値で「ニル」と読む

### nilを利用したif文
* ifの条件文で指定した値がない場合はnilになるため、else側の処理が実行される
* 例:userの年齢情報がない場合に「〜さんの年齢は秘密です」と出力したい場合
* `user=[name:”Yamada”]`
* `if user[:age]`
* ` puts “#[user[:name]さんは#[user[:age]]歳です”`
* `else`
* `puts “#[user[:name]さんの年齢は秘密です”`

### 要素がハッシュである配列の作り方・使い

元記事を表示

【2022年版】 Windows10/11 への Jekyll (4.2.2) インストールにおけるトラブルシューティング

Windows11 にて、2022年4月5日現在の最新版である Jekyll 4.2.2 をインストールし、ローカルで
Jekyll の [Edition](https://cloudcannon.com/community/themes/edition/) テーマを用いたサイトをビルドしようとしたところ、エラーが出てビルドできませんでした。

Google で検索しながら、トラブルシューティングを行いましたが、最終的に修正できるまで時間がかかったため、この記事で対処方法をまとめておきます。

この記事でエラーの詳細を記述しているのは、同じエラーに遭遇しているにもかかわらず、問題の解決方法が分からずに、
[teratail](https://teratail.com/) で質問しても正解が得られなかったり、暫定的な処置をしていたりするので、エラーメッセージで検索して、この記事に辿りつくようにするためです。

また、同じ Ruby 製の静的サイトジェネレーターである [Middleman](https://middlemanapp.com/jp/) でも同じエラーが出ているようなので、

元記事を表示

requireとは?permitとは?ストロングパラメータとは?

# はじめに
WebからPostリクエストやPatchリクエストによって送られきた情報は**paramsの中のモデルの中の値**のように入れ子構造になって格納され、サーバーに渡される。
“` 言語名:app/controllers/posts_controller.rb
def post_params
# params[:post][:content]のように階層構造になっている
params.require(:post).permit(:content)
end
“`
これだけのコードだが、一つずつ読み解いていく。

使用環境は以下の通りである。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
# 目次
[1.requireとは](#1-requireとは)
[

元記事を表示

新米エンジニアによるリファクタリングのすすめ-前編-

## はじめに

「先輩からリファクタリングしろって言われたけどどこを直したらいいか分からない…」
とか
「自分の書いたコード全てがクソコードに見える…」

といった悩みを、誰しも一度は感じたことがあると思います。
自分もその1人で、1年間エンジニアとして働く中で、たくさんのコード修正と格闘してきました。
今回は、先輩から聞いたり、本で勉強したりして、自分なりに身につけた「**こういうコードはやばい!**」や「**このタイプのコードはこう直せ!**」といった感覚をまとめてみました。

誰かがリファクタリングする際に少しでも参考になると嬉しいです。拙い記事ですがよろしくお願いします。
1記事にまとめて書くと長過ぎるので、前編・後編に分けます。

前編では
– 破滅的な命名
– 汎用的すぎる命名
– 複雑な条件分岐
– 長すぎるメソッド

後編では
– 再代入を繰り返す変数
– 重複したコード
– 統一化されてないコード
– 不要なコード
– 不要なコメント

について説明します。

## 注意事項

以下のソースコードは全てRubyで記述しています。
また今回のリファクタリング

元記事を表示

【binding.pry】エラーは出ないけど、画像投稿出来ない時の対処法

#前提
この記事のVS codeにインストールしたrails6.0.0を使用しています。
私のオリジナルアプリケーション(躓いたこと)を用いて、誰かの役に立つ記事になればと思います。

#結論
binding.pryで一時停止をして、パラーメータをチェックする。
※Gemfileに「gem ‘pry-rails’」を記入し、「bundle install」を行う必要あり。
MVCを理解し、間違いを探す方法を習得する方法を習得する。

#アプリケーション概要
私は写真記録のオリジナルアプリを作成しました。
ユーザー登録をしているメンバーで日本一周の写真を記録するためのアプリケーションになります。

#内容
投稿しようと思ったが、情報が投稿されない。
“`
def create
@prototype = Prototype.new(prototype_params)
if @prototype.save
redirect_to root_path
else
render :new
end
end
“`
どうしてもelseに入っ

元記事を表示

RspecでActiveRecord::RecordInvalid: バリデーションに失敗しました

#環境

初めて記事を書かせて頂きます🙇‍♂️
間違っていたら指摘お願いします
M1
ruby3.1.0
rails 6~

—-

#経緯
—-
一度通ったテストが
RspecでActiveRecord::RecordInvalid:バリデーションに失敗しました
に阻まれて沼ったお話

テスト対象はuserなのに何故か違うテーブルのバリデーションがかかってしまう

#結論
—-
アソシエーションをしていたから

今回作っていたテーブルの関係性を説明します

userテーブル, postテーブル, categoryテーブル

user 1対多 post
user 1対多 category

post 多対1 user
post 多対1 category

category 多対1 user
category 1対多 post

アソシエーションを組む事によって
postを作るにはuser, categoryが必要
categoryを作るのはuserが必要
という風になっていました

#Rspec
—-
“`
spec/requests/posts_spec.

元記事を表示

[Ruby]warning: already initialized constant Digest::REQUIRE_MUTEXの解決法

## 概要
ある日自分の開発しているPFでこのような警告表示が出たので解決法を備忘録として残します。

rails routesを実行後
“`
~省略/.rbenv/versions/3.0.2/lib/ruby/3.0.0/digest.rb:6: warning: already initialized constant Digest::REQUIRE_MUTEX
〜省略/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/digest-3.1.0/lib/digest.rb:20: warning: previous definition of REQUIRE_MUTEX was here
“`

## 解決法
[こちら](https://geniusium.hatenablog.com/entry/2021/06/15/133317)の記事を参考に
概要gemをアンインストールした後、updateした
“`
$ gem uninstall digest
“`
“`
$ gem update –default
“`

##

元記事を表示

Ruby on Railsの環境を構築する際のNginx設定ファイルのコマンド及びコード理解

## なぜ記事を書こうと思ったか
Nginx 用の設定ファイルを作成する際にコマンド及びコードの理解を備忘録として残すため。

## default.confのコマンド説明
default.conf
“`
upstream puma {
server app:3000;
}

server {
listen 80;
server_name localhost;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

root /app/public;

location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass

元記事を表示

💎 Crystal言語でも `eval` できる! Anyolite 🟢🔴 がすごい

## はじめに

Crystal言語では `eval` を使うことができません。

もしもCrystal言語で `eval` を使わなければならないとしたら、そのためにはCrystalそのものを実行ファイルの中に組み込まなければならないからです。

Evalはバッドプラクティスとされることが多く、なるべく利用しない方がよいと言われています。しかし、Crystal言語を使っていると、Rubyのevalが恋しくなることがありますね。そんなときに、なんとmruby(やCRuby)をCrystalの実行ファイルに組み込むことによって、Crystal言語でもevalを実行できるようにしてしまう、というスゴいプロジェクトを見つけたので紹介します。

## Anyolite

https://github.com/Anyolite/anyolite

アニョライトって知っていますか? 私は知りませんでした。これはゾイサイトという結晶の中にルビーの結晶が含まれた宝石だそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

ruby open-uri について

たまに、URLを開こうとしても、このようなエラーが出るのではないだろうか?

“`
~/lesson_ruby % rb nokogiri2.rb
/Users/hoge/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/open-uri-0.2.0/lib/open-uri.rb:364:in `open_http’: 503 Service Unavailable (OpenURI::HTTPError)
“`

この対策に、このようなコードを書く

“`rb
require ‘nokogiri’
require ‘open-uri’

url = ‘https://www.amazon.co.jp/PS5-CFI-1100A01-%E8%BB%BD%E9%87%8F%E7%89%88-%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%82%BF%E3%82%A4%E3%83%97-%E3%83%A1%E3%83%BC%E3%82%

元記事を表示

【個人開発】ピースサインで開いた指の角度で競い合ってみるサービスを開発しました✌️

# 🔹はじめに🔹
写真を撮っている時、たまに見かけませんか?

「あの人、ピースサインの指、開き過ぎちゃう?」

そして考えました。

「あの人のピースサイン、何度くらい開いているのか…知りたい!」

そんなもどかしい好奇心から生まれたサービスを紹介します◎

(補足)
所謂ネタアプリですがこちらPFコンテストでの優秀賞作品になりました✌️
本戦の様子が公開されているのでお時間ある方は是非ご覧ください^^
他の登壇者の作品も素敵なサービスばかりでした✨

# 🔹サービス概要🔹
[![Image from Gyazo](https://i.gyazo.com/31ff6d41b383bf24f830cc70c761a632.png)](https://gyazo.com/31ff6d41b383bf24f830cc70c761a632)

ピースサインで開いた指の角度で競い合ってみるサービスです✌️

https://www.peace-sign-competition.com/

https://gi

元記事を表示

Galaaz を触ってみた(TruffleRuby + ggplot2 で散布図を描いてみた)

日本語ではまだ紹介されていないようなので TruffleRuby + Galaaz の人柱やってみました。GraalVM, R, ggplot2 について詳しくない人が見様見真似で書いています。

# Galaaz

GraalVM を使って R の機能を Ruby から使うための gem。

https://github.com/rbotafogo/galaaz

作者の Rodrigo Botafogo さんによる解説記事。これらの記事で Galaaz の存在を知りました。


https://towardsdatascience.com/ruby-plotting-with-galaaz-an-example-of-tightly-coupling-ruby-and-r-in-graalvm-520b6

元記事を表示

未経験の新人でも1ヶ月で「使える」人材に育てる仮想プロジェクト型研修(前編)

## 未経験開発者の育成って難しいですよね。

色々なことを覚えてもらわないといけないし、時間はそんなにかけられないし。
教える先輩が忙しくて手が空かない。

当社では開発未経験の新人さんが入ってくると、研修の一環として仮想の開発プロジェクトを立ち上げて、
仕様決めからリリースまでの一連の開発作業を体験してもらっています。

この仮想開発プロジェクトが終了してから、実際の開発チームに合流してもらっているのですが

**これまでとてもスムーズに開発チームに合流できています。**

この仮想開発プロジェクトがどんな感じのものなのか。
実際にどのように進めていくのか。
といったことを、この仮想開発プロジェクトをサポートする先輩の視点からお伝えしようと思います。

ちなみに、新人視点の記事はこちらです。

– [ 経験ゼロの新人が1ヶ月でウェブアプリを作らされるヤバい研修 part 1](https://qiita.com/Terao-Takumi/items/d2b02a4cf0470675107e)
– [「完全に理解した」状態の僕が「チョットワカル…」になるまでのとある企業の新人研修

元記事を表示

【Rails】通知機能~変更点と補足~

## 記事の対象者
実装した処理の動きについて理解したい人

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 参考にした記事
実装については、下記記事を参考にしました。
今回は一部変更した点と、実装した処理の動きについて自分で補足した部分を書いていきます。

https://qiita.com/nekojoker/items/80448944ec9aaae48d0a#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E8%A8%98%E4%BA%8B

## 実装の流れ(フォロー通知)
**①通知モデルの作成(Notification)
②モデルの関連付け(UserとNotification)
③モデルに通知作成メソッドを作成
④コントローラーに通知作成メソッドの呼び出し処理作成
⑤ビューに通知一覧画面及び通知アイコンの作成**

## 変更箇所
下記が変更点となります。補足を交えながら説明していきます。
・default_scope
・update_attributesメソッド

## ②モデルの関連付け(UserとNo

元記事を表示

[初心者向け]rubyでスクレイピングを行い、その結果でメールを送信する

# 例題

amazonでps5が売り出されていたらメールを送信する

# まず、初めに

htmlから、この値を取り出す

[リンク](https://www.amazon.co.jp/PS5-CFI-1100A01-%E8%BB%BD%E9%87%8F%E7%89%88-%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%82%BF%E3%82%A4%E3%83%97-%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC%E4%BF%9D%E8%A8%BC1%E5%B9%B4%E3%81%82%E3%82%8A/dp/B0B18BG131/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1VTPROMW1C2U9&keywords=ps5&qid=1654946758&sprefix=ps%2Caps%2C256&sr=8-1)

![スクリーンショット 2022-06-11 20.

元記事を表示

ECS FargateとElasticBeastalk(Ruby Platform)を比較

昨年、[本番稼働を意識したECS Fargateを用いたFastAPIの環境構築(ALB、SSM、BlueGreenデプロイ)](https://qiita.com/yuyasat/items/04a083a57f5691f1ed3c)という記事を投稿しました。その後、仕事にて実運用でECS Fargateを利用し始め、ある程度感覚がわかってきましたので、以前利用していたElasticBeanstalk(Ruby Platform)との比較を簡単に紹介したいと思います。
仕事では、ECS Fargateは2022年2月末に本番運用を開始しています。また、ElasticBeanstalkに関しては、2017年より仕事で使っています(既にある環境の運用から始まり、新規構築も何度か行いました)。その経験を踏まえて感じたことですので、使用している機能が限定的だったり、詳しい方から見れば容易に改善できる面もあるかと思います。ご教授いただけましたら幸いです。

## 1. デプロイのしやすさ
| | ElasticBeanstalk | ECS Fargate |
|—|—|—|
|

元記事を表示

OTHERカテゴリの最新記事