Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

【個人開発】ソロ活をお助け!ひとり外食専用投稿アプリを作成しました🍽️【Rails】

# はじめに
こんにちは、なかじ(@nakayama-bird)と申します。
現在、プログラミングスクールに通ってRuby on Railsを学習しております。
今回スクールの卒業制作として、ひとり外食に特化した飲食店の投稿アプリを作成しました。

**サービスURL**
[Me Time Meals | ひとり外食投稿アプリ](https://www.metime-meals.com/)
![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760414/426caa33-0097-02b6-a57c-10479f3a495b.png)

**リポジトリ**

https://github.com/nakayama-bird/metime-meals

:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りのある場合がございます。
もし間違いがあればご指摘いただけますと幸いです。
:::
## 目次
[1.アプリの紹介](#1-アプリの紹介)
[2.技術構成](#2-技術

元記事を表示

【Rails】delete_allでエラーが発生する

## はじめに
Railsのアップデート中にdelete_allを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
コード
“`ruby
User.delete_all(company_id: company.id)
“`

エラー文
“`ruby
wrong number of arguments (given 1, expected 0)
“`

## 解決方法
Rails7では、delete_allに引数を取れなくなっているので、whereを使用するように修正します。
“`ruby
User.where(company_id: company.id).delete_all
“`

## 参考
https://qiita.com/migaruna_debu/items/ad685c6d75d7af5fa7d9

元記事を表示

プロフィール画像の編集を非同期処理で実装する方法

## はじめに
railsのCRUD操作には慣れてきましたが、JavaScriptを使った非同期処理にまだまだ手こずっているので、学習記録として実装した非同期処理を記載します。
特に今回の実装ではchatGPTにかなり助けられた面があるため、なぜそのコードにしているのか、という点も含めて言語化していこうと思います。

## やりたいこと
![20240915_recording.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875060/54a3a46d-6e39-79e5-b899-29421081bf27.gif)

– JavaScriptから画像をPOSTする
– POST後非同期処理でprofile画像を表示する

### 具体的な方法
– axiosとrails-ujsを導入し、javascriptからpost/putする
– javascriptでプロフィール画像の設定状況を確認し、条件に応じて画像の出し分けをする

### 前提
– rails6を使用
– UserとProfileは1

元記事を表示

[Ruby/AWS]alpha vantage APIを使って株のデータをRedshiftに入れる

株のデータを分析してダッシュボードを作るため、今回はAWSのデータウェアハウスサービスであるRedshiftを使うことにした。

GoogleのBig QueryやSnowFlakeのようなサービスで、以下のブログの説明がわかりやすかった。

https://qiita.com/rm_zeal/items/b77818daff6f92fc5cd3

今回の実装で割と迷うところが多かったため、備忘録として残してみた。

## まずは株のデータを取得
株のデータはAlpha Vantageという無料の株APIから取得することに。

https://www.alphavantage.co/

メインページから`GET FREE API KEY`をクリック

![スクリーンショット 2024-09-15 21.54.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754242/18d5acfe-8225-e44e-75f0-a2a4141f9204.png)

情報を入れてGETボタンを押すと簡単にキーが

元記事を表示

休日に新しい言語に触れたい ~Ruby編 特徴的なコードを実装してみる~

# はじめに

https://qiita.com/MichaelHashimoto/items/7b9004668421ae2cbb59

こちらの記事の続きです。

私はC#やPythonを仕事で使っているため、これらの知識をベースにして理解を広げます。同じような境遇の方の理解の助けになれば幸いです。

# 特徴的なコードを実装してみる

## ブロック

rubyに特徴的なものとして、”ブロック”があります。

まずは、以下のサンプルコードを見てください。
“`ruby
numbers = [1, 2, 3, 4, 5]
numbers.each do |number|
puts number * 2 # putsで出力
end
“`

出力結果は以下で、numbersの各要素が2倍されたものが出力されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1223968/ece19765-005c-5247-93ec-9de3f3b24902.png)

このように

元記事を表示

Paizaで遭遇したRuby メソッドまとめてみた。

webエンジニアへ転職活動中の[ニノ](https://x.com/MuscleEngi87389)です!

これまで`Rails`については、学習、個人開発を行ってきましたが、就活で`企業のコーデイング試験`を解く中で、`ruby`についての理解ができていないことがわかりました。そこで`paiza`をここ1ヶ月くらい解く中で新しく知った`ruby`のメソッドや用語をまとめておこうと思います。

### 用語
#### irb : Rubyを対話的に入力・実行するためのツール

### 知識
・Rubyでは、`大文字`で始まる変数(例: P, X, Y, Z)は「定数」として扱われる。

## メソッド

### `map`メソッド:

配列の各要素に対して何らかの操作を行い、その結果を集めて新しい配列を作成するメソッド
“`ruby
# 基本構文
配列.map { |item| 実行する処理 }

# 例:各要素を2倍にした配列を返す
numbers = [1, 2, 3, 4, 5]
doubled_numbers = numbers.map { |n| n * 2 }
# =>

元記事を表示

オブジェクトとハッシュを照合するには?flattenメソッドの使用

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

###### 制作しているクローンアプリの中でControllerで取得したある2つのデータをハッシュとオブジェクトの文字列という形で保存していました。これらのデータを称号する為に調べて実装した内容を掲載します。

## 実装したコードの紹介

“`ruby:tweets_controller.rb
def show
@tweet = Tweet.includes(images_attachments: :blob).find(params[:id])
@comments = @tweet.comments.includes(user: { icon_attachment: :blob }, images_attachments: :blob)
@replies = {}
@comments.each do |comment|
@replies[comment.id] = Comment.whe

元記事を表示

yarn install –check-filesをしたらnode-sassが読み込まれないエラー

自分用備忘録として作成
(初心者のため、もし違っていたら教えていただけると幸いです。)

課題でクローンしたアプリケーションを立ち上げるためにyarn install –check-filesをしたら、
error /Users/yec2016/workspace/dpro/rails_refactoring_task/node_modules/node-sass: Command failed.とエラーが出た。

環境は、
mac
node -v 18.18.0
node-sass -v 4.14.1
yarn -v 1.22.22

解決方法としては、node-sassのバージョンに対応できるnodeバージョンまで下げる。(pythonが読み込めないというエラーもあったため、pythonをインストールしたが、意味がなかった。)

#node-sassのバージョン確認
npm list node-sass
football_info_for_refactoring@0.1.0 /Users/xxx/workspace/xxx/rails_refactoring_task
└─┬ @

元記事を表示

YAMLの作法

今回は、インターンの中で利用した、ymlについて話していきたいと思います。
# YAML (YAML Ain’t Markup Language)とは?
ymlとは、一言で言えば、
【データを直感的かつ人間が読みやすい形式で記述するためのデータ表現形式】です。
“`
name: John Doe
age: 30
email: john.doe@example.com
“`
:::note info
こんな感じで使う
:::
# 今回どんな時に使ったか
Webサイトの中で用いられている、英語の情報を日本語表記に変換するのに使いました。
例えば、
“`
ja:
hello: “こんにちは”
user:
name: “名前”
email: “メールアドレス”
messages:
welcome: “ようこそ、%{name}さん!”
goodbye: “さようなら!”
“`
これをconfig/locales/ja.ymlに記述します。そしてビューで表示させるには、
“`
<%= I18n.t('hello') %>
<%= I18n.t

元記事を表示

Railsでアバター画像が設定されていないときにプロフィール編集ページにリダイレクトする設定方法

## やりたいこと
ユーザー登録後、プロフィール画像を登録していない場合にはプロフィール設定のページに遷移したい
※抽象化すると、特定の条件を満たすとき、特定のページに遷移させたい

### 前提
– Railsを使用
– User has_one Profile の関係
– ユーザーがSign upしたタイミングではprofileはつくられない

## 課題
– プロフィールは自動で生成されないため、`unless current_user.profile.avatar.attached?`のような条件文だと、.nilクラスのエラーが出る
– application_controllerにプロフィール編集画面へのリダイレクトを記載すると、リダイレクトが繰り返されしまう

## 解決策
### 条件文の記載方法
application_controllerに以下を記載。
“`
before_action :check_avatar

private
def check_avatar
if user_signed_in?
unless current

元記事を表示

【Rails】グループ機能の実装手順

この記事では、Railsでグループオーナーが作成したグループに、ユーザーがグループに参加・離脱できるようなグループ作成機能を実装する方法をまとめています。

## 作製するモデルのアソシエーション
今回作成するテーブルは`GroupUser`と`Group`のふたつです。

![スクリーンショット 2024-09-14 204259.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882438/2a5cb3bb-4522-1448-b5b0-fb7e73f0735f.png)

### Groupテーブル
グループの情報を保存します(`name`、`introduction`、`image_id`など)。
`owner_id`フィールドにより、グループの所有者(ユーザー)を表します。
### GroupUserテーブル
中間テーブルで、ユーザーがどのグループに所属しているかを管理します。
`user_id`と`group_id`で`User`と`Group`を関連付けています。

# 実装手順
## 1

元記事を表示

メソッドの公開レベル

Rubyにおけるメソッドの公開レベルには、public、protected、privateの3種類があります。それぞれメソッドへのアクセスを制御するために使いますが、特にprivateメソッドを指定する際にはいくつかの注意点があります。
1. privateメソッドの基本的な性質
privateメソッドは、そのメソッドが定義されたオブジェクトの外部から呼び出すことができません。クラスのインスタンスメソッドの中でしか呼び出すことができず、レシーバ(オブジェクト)を指定することもできません。
“`
class Example
def public_method
puts “This is a public method.”
private_method
end

private

def private_method
puts “This is a private method.”
end
end

e = Example.new
e.public_method # “This is a public method.” “This is

元記事を表示

ハッシュ値の性質 ハッシュの衝突耐性とは

今回はハッシュ値についてまとめてみます。

ハッシュ値から元の値を推測するのが難しいことは理解していましたが、いろいろ混乱するような性質があったため、改めて頭の整理を兼ねてこの記事にまとめました。

## そもそもハッシュ値とは

ハッシュ関数という特別な関数にデータを入力して出力されるビット列のことです。広く使われているものとして、SHA-256、SHA-512、RIPEMD-160などがあります。

ハッシュ関数が出力するハッシュ値には、異なるデータから同じハッシュ値が生成されないという特徴があり、この「同じハッシュ値が生成されないこと」を衝突耐性と呼びます。

この特徴から、ハッシュ関数は入力データが少しでも変わると出力されるハッシュ値も大きく変わります。これを利用してデータの改ざんチェックやデジタル署名の作成にも応用されています。

# ハッシュ値の性質
引用元:[ハッシュ値にはたくさんの特徴や役割がある!具体的な使い方を理解しよう!](https://www.gmosign.com/media/work-style/hassyuti/#index_id7)

思った以上に色

元記事を表示

Object でも Hash みたいに分割代入したい

# やりたいこと

Object でも Hash みたいに分割代入 (destructuring assignment) したい。

“`rb
# Hash オブジェクトは右代入を使って分割代入ができる。
heterogeneity = { brand_and_name: ‘mowl – ヘトロジェニティ’, color: ‘紫’ }
heterogeneity => { brand_and_name:, color: }
[brand_and_name, color]
#=> [“mowl – ヘトロジェニティ”, “紫”]

# ちなみに Data オブジェクトでもできる。
Yoyo = Data.define(:brand_and_name, :color)
heterogeneity = Yoyo.new(brand_and_name: ‘mowl – ヘトロジェニティ’, color: ‘紫’)
heterogeneity => { brand_and_name:, color: }
[brand_and_name, color]
#=> [“mowl – ヘトロジェニティ

元記事を表示

Rubyでの配列における |(和集合)と ||(論理演算)の違いを調べた

最近、Ruby Silverの資格試験の勉強をしています。全然Rubyのこと理解してないんだなぁと絶望しつつも伸びしろを感じております😚

以下の問題を考えていた際に、配列に対する `|` と `||` の違いが気になったので調べてみました。


問題:

XXXXに記述することで、実行結果が30以上になるプログラムを選択してください。

“`ruby
a = [-1, 2, 3, 4, 5]
b = (4..6).to_a

puts XXXX
“`

選択肢:

1. `a.inject(:+) + b.inject(:+)`
2. `(a | b).inject(:-).abs + (a & b).inject(:+).abs`
3. `(a | b).inject(:*) + b.inject(0) { |x, y| x + y ** 3 }`
4. `((a || b).map(&:succ).inject(:*) * (a && b).inject(:*).abs2 + 29)`

この問題の`a | b` と `a || b` の結果がどうなるか分からな

元記事を表示

Bulletがいつも正しいわけではない?!

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

私は普段のプログラミング学習中にRailsのgemでN+1問題や不要なeager loading(includes)を検知してくれるBulletを使用しながらアプリの制作をしています。
自分でも気付き難いN+1問題などもありますので、普段は自動検知して教えてくれて助かっています。

今回はそんなBulletが検知してくれるN+1問題や不要なincludesがどうやらいつも正しくはないようだ、との考えの基に記事を書いています。

まずは検知メッセージと実際のコードをご紹介します。

対象のeager loading(不要なincludes)検知メッセージ
![スクリーンショット 2024-09-13 13.19.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/66e71273-d0cb-d454-8a51-e376edbda527.png)

元記事を表示

ケント・ベックに学ぶ良いコードの書き方🗒️

こんにちは、しが あきとし([@akitosihga](https://x.com/akitoshiga))です。

先日あるMeetUpで良いコードの書き方について考える機会がありました。
『良いコード』の定義は幅広く様々な解釈があると思います。
その中でも、自分が敬愛するプログラマーのケント・ベックから学んだ事に焦点を当てて良いコードの書き方についてまとめました。

## ケント・ベックとは
* テスト駆動開発(TDD)で有名なプログラマー
* アジャイル開発におけるエクストリームプログラミング(XP)の考案者としても有名
* アジャイル開発関連の書籍に度々登場するCRCを発明したのも彼だったりする
* 代表的な著書は「テスト駆動開発」「エクストリームプログラミング」

TDDのイメージが強い彼ですが、実はコーディングに対して並々ならぬ情熱を持っているのです。

彼の著書「実装パターン」では以下のように語っています。
> 『 70年の人生は、20億秒を少し超えるに過ぎない。誇りの持てない仕事で無駄にする時間はない。良いコードを書くこと自体が喜びであり、そのコードを他の人が理解し、評

元記事を表示

link_toメソッドを使った範囲リンクとネストした個別リンクの実装方法

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

#### link_toメソッドを使って範囲リンクと複数のlink_toをネストさせてそれぞれのリンクを設置する

この記事ではWebサービス(Xのクローンサイト)を作成中に遭遇したちょっとした壁?についてお伝えしています。

Webサービス上で他のページへのリンクを貼る際にlink_toメソッドは皆さんお使いになると思います。

以下はリンクのサンプル画像とサンプルコードです。

`ホーム`のところにカーソルを合わせてクリックすれば`root_path`へのリンクにアクセスできます。

![スクリーンショット 2024-09-12 20.18.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/dcc486de-01ce-f2d8-0814-dc8595d1a56f.png)

“`ruby:_nav.html.slim
ul

元記事を表示

Heroku(本番環境)のみエラー発生、開発環境は問題無し

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

### 開発環境で機能を実装し終わって、いざHeroku(本番環境)へPushした時にエラーが発生しました。
NoMethodError in CommentsController#create
undefined method’parent_id=’ for #<保存しようとしたデータ>

![Heroku デプロイ後のエラー画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/328aad5d-6767-159f-7815-0f6e62cbf644.png)

このエラーが開発環境で出ていたら、空(Nil)のデータをcreate → save しようとしているのかな、ということでbinding.pry等でデバッグして変数内の値をチェックしてみよう等といった動きを取ろうと考えるのですが、既に開発環境では動作の問題が無いことを確認できていました

元記事を表示

【Ruby】sub・gsub・tr で文字を置換しよう!(tr と gsub の相違点)

## 概要
subなどのメソッドを使用すると任意の文字を置換可能
stringのみ可能

~~~ ruby
text = “今日はピクニックに行けなかった…”

# 引数を指定することで文章を置換
text = text.sub(“行けなかった…”, “行った!”)

p text

# result
“今日はピクニックに行った!”
~~~

~~~ ruby
# 直接要素につけることも可能
p “hamburger”.sub(“burger”, “ster”)

# result
“hamster”

# Integerには不可能なので注意
p 4444444.gsub(4, 0)

# result
=> : undefined method `gsub’ for 4444444:Integer (NoMethodError)
~~~

## sub
**sub(第一引数, 第二引数)**
・初めに第一引数にマッチした文字列だけを第二引数の値に置換
・再代入必要

~~~ ruby
text = “ハンターハンター”

text = text.sub(“ハンター”, “

元記事を表示

OTHERカテゴリの最新記事