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

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

【Ruby】ラーメンでわかる!引数多すぎ問題の解決方法

## はじめに
この記事は、「クラスをnewする際の引数が多くて困ってる」人向けのものです。
『[オブジェクト指向設計実践ガイド 3.2 疎結合なコードを書く-引数の順番への依存を取り除く](https://gihyo.jp/book/2016/978-4-7741-8361-9)』を参考にしてこの記事を作成しました。

ラーメンの例を用いて、クラスをnewする際の引数が多いときの問題点とその解決方法を紹介しているのでぜひご覧ください。

## まずは結論から
引数をハッシュで渡そう!

# ラーメンを用いての例
あぁ、ラーメンが食べたい。そうだラーメンクラスを使ってラーメンを作ろう!
ラーメンに必要な具材は、これとあれとそれだから…っと
よし、これをRamenクラスに渡してあげればきっとラーメンが作れるはずだ〜
(私は煮玉子いらない派なのでnilにしてます。)
“`ruby
class Ramen
def initialize(noodles, soup, roast_pork, bamboo_shoots, marinated_boiled_egg)

元記事を表示

sold outに関する続き

先ほどのものの追記です。

商品の詳細ページに遷移後、売り切れの表示をするためには

“`ruby
<% if @item.order.present? %>

“`
となる。最初は@をつけておらず、エラーが出ておりましたが
1つの決まりきった商品=@item とでもいう認識でしょうか。

自己満で失礼:zzz:

元記事を表示

【Rails】ActiveRecordのエラー解決法。no such column

railsの勉強でエラーにぶつかりまくって、パンクしそうなのでメモに残そうと思い、この記事を書きました。

同じようなエラーで困っている方の参考になれば嬉しいです。

初学者なので間違っていればご指摘お願いします。
## ActiveRecord::StatementInvalid in Tasks#index
現場Railsのチャプター4が最後まで進んだので、実装できているか改めて確認しようとログインをしたらエラーが発生しました。

![スクリーンショット 2023-05-09 14.21.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676271/4e06bc36-b650-20cd-8528-54379a20c5ce.png)

“`
ActionView::Template::Error (SQLite3::SQLException: no such column: tasks.user_id: SELECT “tasks”.* FROM “tasks” WHERE “tasks”.”

元記事を表示

bundle installエラー解決法:An error occurred while installing mimemagic

環境構築中に、`bundle install`をした後に`mimemagic`というものに関するエラーが発生しました。初めてみるエラーだったので、メモに残そうと思います。

まだ、初学者なので間違っていたら教えていただければ幸いです。

:::note info
設定したいバージョン(mac環境)

Ruby 2.6.4
Rails 5.2.3以降
:::

## エラーが発生するまでの流れ
1. Ruby 2.6.4をインストール
1. Rails 5.2.8をインストール
1. rails -vを実行後に以下のエラー文が発生
“`
Could not find rails-5.2.3
Run `bundle install` to install missing gems.
“`
文章に従い、`bundle install`を実行しましたが、またもやエラー文が発生。今回はこのエラーを解決していきます。
## 解決したいエラー
`bundle install`実行後に発生したエラー文はこちらです。
“`
Gem::Ext::BuildError: ERROR: Failed t

元記事を表示

ActionController::UnknownFormat エラーの解決法

今回は、個人的に解決するのに時間がかかったエラーだったのでメモに残そうと思います。

もし、同じエラーで悩まれている方がいれば参考になれば嬉しいです!

:::note warn
まだ、初学者なので間違っているところがあればご指摘ください。
:::

## エラーが発生した流れ
やりたいこと:ログイン機能を実装したい。

user_sessionsコントローラーを作り、それに対応する`new.html.erb`のviewも作成。

ログイン画面をブラウザ表示しようとしたところ以下のエラーが発生。
## ActionController::UnknownFormat
今回、発生したエラー文です。
“`
ActionController::UnknownFormat (UserSessionsController#new is missing a template for this request format and variant.

request.formats: [“text/html”]
request.variant: []

NOTE! For XHR/Ajax or A

元記事を表示

simple_formatについて:改行の反映とXSSまとめ

railsの勉強でエラーにぶつかりまくって、パンクしそうなのでメモに残そうと思い、この記事を書きました。

初学者なので間違っていればご指摘お願いします。

##前提
参考書として使っている現場railsの学習で、タスク管理アプリを作っていた時に気になったことです。

タスク詳細画面のviewを作っていた時に、最初はこのように記述していました。
(ファイルの形式はslimです)
“`
td = @task.description
“`
![スクリーンショット 2023-05-18 21.06.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676271/97b7b0ff-6d16-e36c-184e-705201a09423.png)

ブラウザ表示して、詳しい説明フォームには以下のように改行して入力しました。

hello
good morning

ですが、なぜか改行が反映されず…。HTML変換後はこのようなコードになっていました。
![スクリーンショット 2023-05-18 21.07

元記事を表示

【Ruby】問題集解答 Part5(paizaラーニング)

# カンマ区切りのN個のデータの入力 (paizaランク D 相当)
https://paiza.jp/works/mondai/stdin/stdin_comma_n
### 自分の解答
“`ruby:practice.rb
num = gets.to_i

num -= 1

inputs = gets.chomp.split(“,”)

for i in 0..num
puts inputs[i]
end
“`
今回は最初に受け取った数値を活かすコードが書けた。
カンマ区切りでどれだけたくさん入力しても、最初に受け取った`num`分だけ出力する。
### ChatGPTの解答
理解しました。以下は、入力されたN個の文字列を入力として受け取り、順にN行でそのまま出力するRubyプログラムの例です。

“`ruby
# Nの値を受け取る
n = gets.to_i

# N個の文字列をカンマ区切りで受け取り、配列に格納する
input_strings = gets.chomp.split(‘,’)

# 配列の要素を順に出力する
input_strings.each do

元記事を表示

【Ruby】問題集解答 Part4(paizaラーニング)

# カンマ区切りの3つのデータの入力 (paizaランク D 相当)
https://paiza.jp/works/mondai/stdin/stdin_comma_3
### 自分の解答
“`ruby:practice_01.rb
inputs = gets.chomp.split(“,”)

inputs.each do |input|
puts input
end
“`
入力を受け取ると同時にカンマ区切りで変数に格納し、eachメソッドで出力する。

### ChatGPTの解答
以下は、問題を解決するためのRubyプログラムの例です。

“`ruby:ruby
# 入力を受け取る
input_str = gets.chomp

# カンマで分割して各文字列を取得
strings = input_str.split(‘,’)

# 順に3行で出力
strings.each do |str|
puts str
end
“`

このプログラムは、標準入力から1行の文字列を受け取り、カンマで分割して配列に格納します。そして、その配列を順に取り出して各文字列を3行で出力し

元記事を表示

furima アプリにて 【商品が売れるとsold out の表示】

結論から言うと

“`ruby’
<% if item.order.present? %>
“`
こちらが回答。

なんとなく予想の形はできていたのですが
アソシエーションの表記がまちがっていました。

もし選択した商品に紐づく購入記録が存在していたら(空ではなかったら)、”sold out”と表示する
ということがヒントのようでしたが、意味が分からずメンターさんに聞きました。

orderモデルに記載していた
“`ruby’
class Order < ApplicationRecord belongs_to :user belongs_to :item has_one :address end ``` そのままの意訳だと もし(if) 商品(item)に 購入記録(order)があれば(present) フォームオブジェクト(今回であればpurchase_record) かと思っていましたがどうやらフォームオブジェクトはこない。なぜならモデルではないから!!とおっしゃっていたような。。(もしかしたら間違いかも) ちなみに確実にいえることは フォー

元記事を表示

プロキシ認証環境下でのrbenvからrubyのインストールしたらcrulコマンドが邪魔してきた話

# 今回の困りごと
社内プロキシ傘下にあるUbuntu環境の中で、rbenvでrubyをインストールしようとしたところ、こんな具合のエラーが出ました。
というわけで、今回はこのエラーをやっつけます。

“`
$ rbenv install 3.22
==> Downloading ruby-3.2.2.tar.gz…
-> curl -q -fL -o ruby-3.2.2.tar.gz https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0

元記事を表示

Rails6.1でRubyを3.2にしたらスコープでキーワード引数が使えなくなった

# 背景
ruby on railsで開発しているのですが、rubyのバージョンを上げようと思ったら躓いてしまいました。日本語だとあまり情報がなかったので記事にしてみました。

railsとrubyのバージョンは下記の通り。
rails: 6.1.7.7
ruby: 3.0.6 -> 3.2.3

そもそもスコープってなに?というかたは、こちらの[リンク](https://pikawaka.com/rails/scope)とかが参考になるかもしれません。
私が開発しているアプリでは、モデルの中でよく使う条件式をわかりやすい名前のスコープとして定義したりしてます。

# 何が起きたのか?
例えば下記のようなスコープがあったとします。
(実際はキーワード引数を使う必要はないと思いますが、あくまで例なので悪しからず)
“`
User < ApplicationRecord scope :younger_than, lambda { |age:| where(age: ...age) } end ``` 使うときは、こん

元記事を表示

Rails フォロー機能の実装

# はじめに
今回はXクローンの実装にてフォロー機能を実装したので、自分自身の備忘録として、また今後フォロー機能を実装する方のお役に立てればと思いこちらの記事を書くことにしました。

# フォロー機能の作成
要件として、ユーザーをフォローしたり、フォロー解除できる機能を実装する。

※ 前提として、ユーザー登録がすでに実装されているものとします。

# フォロー機能実装に必要なファイル
#### 作成するモデル・テーブル
– relationsipモデル
– relationsipテーブル
#### 作成するコントローラー
– relationsipsコントローラー

# フォロー機能について
– フォロー機能では、`フォローする人`と`フォローされる人`がいる
– `フォローする人`と`フォローされる人`はどちらも、`”User”`である
– Userは複数のUserをフォローすることができる
– Userは複数のUserにフォローされることができる

この関係性はN:Nの関係性なので中間テーブルが必要!

![IMG_F513C6EFE3E4-1.jpeg](https://qii

元記事を表示

[Ruby] Rails+NginxのDockerCompose環境

# はじめに

[Ruby on Rails](https://railsguides.jp/)のローカル開発環境のDockerCompose簡易テンプレートを作成しました。

https://railsguides.jp/

railsをインストールする際は、通常、railsプロジェクトを作成してからGemfileで依存パッケージをインストールする手順となっております。従って、依存パッケージのインストールをDockerのイメージレイヤに反映させるために`docker compose build`が必要でした。

私が今回作成した簡易テンプレートでは、Dockerfile内でGemfileを取得して依存パッケージをインストールし、そのあとに`WORKDIR`にRailsプロジェクトを生成する手順となっております。従って、Dockerfileの処理が完了したときには、すでに依存パッケージのインストールがDockerイメージレイヤに反映されているため、`docker compose build`の実行が不要となっております。

※ Dockerfile内

【開発実績】エンジニア向け就活マッチングサイト【Rails】

# はじめに
株式会社prezyのインターンにて、エンジニア向け就活マッチングサイトを開発した。
エンジニア3名で開発し、そのうち1人がフロント、2人がバックエンドを担当した。私の担当はバックエンドである。

# アプリの内容
## 企業紹介
企業は、自社の情報を登録できる。
業種や所在地、従業員数などの基本的な情報に加え、その企業が出している求人情報を登録できる。
求人情報は、詳細を登録することもでき、そこで詳しい業務内容などを記載できる。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626170/db943967-d436-1235-6293-7e0445ea91a2.png)

## 学生検索
企業は、条件で絞り込んで学生を検索できる。
条件には、
・希望業種 ・言語スキル
を指定できる。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626170/c6feede1-d6e7-488d-6c12-

【Rails】gemの削除・バージョン変更方法

# 【Rails】gemの削除・バージョン変更方法
初めまして!

今回はgemの削除・バージョン変更方法についてです。
※自分は「bundler」を使っているので「bundle exec」を加えてのコマンド紹介になっています。
(bundleは、Rubyで使用されるGemの管理ツールです。)

### gemのアンインストール方法
“`
$ bundle exec gem uninstall 消したいgem名
“`
    ⬇︎
Gemfileから消したいgemを削除
    ⬇︎
“`
$ bundle install
“`
以上でGemfile.lockからも消えます。

・具体例(「sorcery」と言うgemを消す場合)
“`
$ bundle exec gem uninstall sorcery
“`
    ⬇︎
Gemfileから今回消したいgem = 「sorcery」 を削除
    ⬇︎
“`
$ bundle install
“`

### gemのバージョン変更方法
バージョン変更はまず上記で紹介したように元々ある「バージョンを変え

既存Railsアプリをdocker化したらRSpec走らん問題【初学者向け】

既存のrailsアプリをdocker化するとローカルでエラーなく走っていた`RSpec`の`system spec`のテストが何一つまともに走ってくれず、修正した内容の備忘録となります。
どなたかのお力になれば嬉しいです。

:::note warn
プログラミング初学者なので、内容に誤り等ある可能性があります
誤りがありましたら教えてくださると幸いです
:::

環境
ruby 3.2.2
Ruby on Rails 7.0.8
Docker 24.0.2

# エラーその1
`docker compose run web bundle exec rspec`を実行すると
“`
1.1) Failure/Error: visit root_path

Selenium::WebDriver::Error::WebDriverError:
unable to connect to /root/.cache/selenium/chromedriver/linux64/122.0.6261.57/chromedriver

Rspecで関数のモックをしているのに実行されてしまう

# はじめに
Rspecで2回同じところにハマったのでまとめます

# 問題

以下のようなテストを書きました

“`rb
require ‘spec_helper’

RSpec.describe sample do
describe ‘サンプルのテスト’ do

context ‘正しい引数が与えられた場合’ do
it ‘成功する’ do
params = {“hoge”=>”fuga”}
test.put_api(params)
expect(TestApi).to receive(:put_test).with(params.to_json).and_return(true)
end
end
end
end
“`

しかし実際にAPIを叩く関数をモックしているのになぜか実際にAPIを叩いてエラーになりました

# 解決方法

このような場合はモックとアサーションを兼任しているので、実際の呼び出し前にexpectを書く必要があります

“`rb
require ‘spec_he

AtCoder Beginner Contest 343参戦記録

RubyでAtCoderに参戦した記録です。
初めてABC3完できました!(配点は低めでしたが…)
D問題はコンテスト終了後に解説を見てからコードを書きました。

## [ABC343 A Wrong Answer](https://atcoder.jp/contests/abc343/tasks/abc343_a)
0~9の整数のうち、与えられた整数A、Bの和と等しくないもののうち1つを出力する問題です。
“`Ruby
a,b=gets.split(” “).map(&:to_i)
for i in (0..9)
if i != a + b
puts i
break
end
end
“`

## [ABC343 B Adjacency Matrix](https://atcoder.jp/contests/abc343/tasks/abc343_b)
N個の頂点があるグラフについて、各頂点が他のどの頂点と辺を持っているかを出力する問題です。

“`Ruby
n = gets.to_i
array = []
n.times do
array << get

【個人開発】テキストにコメントを追加するアプリ【Rails】

# はじめに
大学の研究室で、教授に論文を提出し、訂正していただくことがある。
そのようなとき、紙媒体で提出し、そこにコメントをいただいていた。
印刷するのは無駄だし、テキストにコメントをつけるアプリを作ろうと思い開発した。

# 概要
内容はシンプルで、ユーザーが行う操作は次の通りである。
1. 文章追加ページ(/texts/new) から添削したい文書を追加する。
1. 添削ページ(/texts/:id/edit) にアクセスする。
1. コメントを追加したい場所を選択し、右クリックする。
1. 表示されたコメント入力欄にコメントを追加し、追加ボタンを押す。
1. プレビューページ(/texts/:id) にアクセスし、プレビューする。
1. PDF作成ボタンをクリックし、PDF形式でダウンロードする。

コードは次のGitのレポジトリに記載している。
[Gitのレポジトリ](https://github.com/takiAtdu/comment-app)

# 実際の画面
## 文章追加ページ(/texts/new)
文章を入力するページは次のようなフォームにした。
テキストを

【Ruby】問題集解答 Part3(paizaラーニング)

# N個のデータの入力 (paizaランク D 相当)
https://paiza.jp/works/mondai/stdin/stdin_n
### 自分の解答
せっかく受け取った`num`を上手く使っていないのが美しくない気もするが、前回ChatGPTから教わったことを活かしたいと考え、`split`を使った。
“`ruby:practice_01.rb
num = gets.to_i

array = gets.chomp.split

puts array
“`
「2行目でN個の文字列が半角スペース区切りで与えられます。」とあるが、上記のコードにおいては、最初に受け取ったN個分の入力しか許さない仕様にはなっていないところが減点ポイントかもしれない。

### ChatGPTの解答
以下は、与えられた条件に基づいて標準入力からN個の文字列を受け取り、順にN行で出力するRubyのコードです。

“`ruby
# Nの値を受け取る
n = gets.to_i

# N個の文字列を半角スペース区切りで受け取り、配列に格納する
strings = gets.split

# 配列の