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

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

【Ruby】paizaラーニング問題集解答(入力値を使った演算)

# 引き算・掛け算 (paizaランク D 相当)
https://paiza.jp/works/mondai/d_rank_level_up_problems/d_rank_level_up_problems__accompanied_by_stdin_2
### 自分の解答(誤答)
“`ruby:practice.rb
numbers = gets.split

A = numbers[0]
B = numbers[1]

D = A – B
P = A * B

puts “#{D} #{P}”

# Runtime error
# Main.rb:18:in `

‘: undefined method `-‘ for “397”:String (NoMethodError)

# D = A – B
# ^
# Did you mean? -@
“`
### ChatGPTの解答

理解しました。入力が半角スペースで区切られて1行で行われる場合、それに対応するようにコードを修正します。

“`ruby
# 1行で入力を受け取り、半角スペースで分割

元記事を表示

Rubyのeachとmapを比較してみた

## はじめに
転職をきっかけにRubyを触り始めており、プロダクションコードや書籍、チュートリアルで`each`と`map`が多用されいたのですが、メソッドの処理が似ているということもあり混乱してしまいました。

そこで、この二つのインスタンスメソッドの共通点や異なる点をリファレンスマニュアルを参考にしてまとめてみました。

## eachとmapの共通点
共通点は以下の二つです。
– Arrayクラスのインスタンスメソッドである
– ブロックを省略した場合は`Enumerator`が返る

https://docs.ruby-lang.org/ja/latest/class/Array.html

Arrayのリファレンスマニュアルのインスタンスメソッドを確認すると、`each`と`map`があるのでどちらもArrayクラスのインスタンスメソッドであることがわかります。

また、`irb(interactive Ruby)`でブロックを省略した挙動を確認してみると`Enumerator`というものが返ってくることがわかります。

“`ruby
irb(main):001> [

元記事を表示

Railsでのアーキテクチャを考える

### はじめに
Ruby on RailsでAPIの開発を行ってるんですが、Railsは開発者に優しくとても開発がしやすいです。一方、どこからでもModelが呼べたりと人によって書き方もバラバラになりやいフレームワークでもあります。
とはいえ、Rialsをクリーンアーキテクチャで設計して開発を進めていくのは、Railsの良さをなくしちゃうのであまり相性が良くないと思います。そこで、Railsの既存のMVCを崩さない範囲でルールを決めて開発を行うようにしました。
開発はRailsの6系で、APIモードで開発を行っています。

### 考えた各層の役割
最終的に各層の役割は以下のように定義しました。

| | 役割、詳細 |
|———|———|
| Controller | パラメーターなどを取得し、Service層とPresenter層を呼び出す役割。ビジネスロジックは持たず、基本的に呼び出しのみを行う。 |
| Model | バリデーションや(サービスではなく)ドメインに依存するロジックを持つ役割。joinやwhereなどactive recordを

元記事を表示

【Ruby】入力の確認とエラー処理(備忘録)

ChatGPTからRubyにおける入力の確認とエラー処理について教えてもらったので、一旦書き留めておく。
いますぐ実践するのは難しいが、早くこのレベルのコードをすらすらかけるようになりたい。
### 私
以下のコードについて解説してください。

array = []
array[0] = gets
array[1] = gets
puts array
### ChatGPT
このコードは、Ruby言語を使用して標準入力からユーザーに2つの入力を求め、それを配列に格納してから、その配列を出力する簡単なプログラムです。

解説を具体的に説明します:

1. `array = []`: 空の配列を作成します。これは後でユーザーの入力を格納するための容器として使用されます。

2. `array[0] = gets`: `gets` メソッドを使用して、ユーザーに対して1つ目の入力を要求します。入力された値は、配列 `array` の最初の要素に代入されます(インデックス0の位置)。

3. `array[1] = gets`: 同様に、`gets` メソッドを使用して、ユーザーに対して2つ目

元記事を表示

エラーメッセージの日本語化

# はじめに
プログラミング初心者です。
温かく見守ってください。
何か謝っている点があれば、ぜひご指摘をお願いいたします。
# エラーメッセージの日本語化
### 事前準備
“`ruby:config/aplication.rb
# 中略
module アプリの名前
class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 7.0 # 日本語の言語設定 config.i18n.default_locale = :ja   ←追記 # 省略 end end ``` ```ruby:Gemfile #中略 gem 'rails-i18n' ←追記 ``` bundle installをして、サーバーを再起動します。 ### ファイルを新規作成(2つ) 1、config/localesディレクトリに、devise.ja

元記事を表示

ハッカソン序章: 初挑戦!Ruby勉強会の企画から運営まで

# はじめに
とあるハッカソンに技術メンターとして、参加させていただきました。ハッカソン当日以前に**Rubyに関する勉強会**(1時間枠)を実施する必要があり、その勉強会の企画と運営に関してお話します。

# 勉強会当日までの流れ
技術メンターとして参加することが決まり、まず始めにハッカソン運営メンバーとキックオフMTGを行い、どのような勉強会の内容でいくのか摺合せを行いました。その後、他技術メンターと協力して勉強会の資料を作成し、勉強会当日を迎える形になりました。

# 勉強会の内容
勉強会の内容は、受講対象者をプログラミング経験者だがRubyを触ったことがない人ということでハッカソン運営メンバーと摺合せできていたので、RubyやRuby on Railsの概要から入り、Rubyの基本構文等を説明しました。その後、クラスやインスタンスに関して簡単に説明しました。Rubyの基本構文等を説明する際は、例題や問題を散りばめて実際に実行(ブラウザ上でRubyコード実行できるサービスを使った)してもらい実行結果を自分の手で確かめてもらう形式を選択しました。

# 勉強会当日
勉強会はウェブ会

元記事を表示

fields_forを使って親子関係にあるモデルのレコードを一度に編集・削除する

# はじめに
この記事ではポートフォリオ作成中に学習したことを自分のために記録しています。
初学者のため理解が不十分なところがあるかもしれません。
その場合はご指摘いただけると幸いです。

# やりたいこと
– 親子関係のあるモデルのレコードを一度に編集・削除したい

YouTubeのブックマークアプリを作成しているので、ブックマーク(親)とそれに紐づくタイムスタンプ(子)を1つのフォームで編集・削除できるようにしていきます。
ブックマークとタイムスタンプは一対多の関係です。

完成イメージはこんな感じ
![BF1615E1-419E-4E9B-9051-03853492B71B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3671013/0d7f635e-1dac-b613-4c33-475f6f319f3d.png)

# いざ実装
## 子モデルの編集
### accepts_nested_attributes_for⁠メソッドを親モデルに追加
“`app/models/bookmark.rb

元記事を表示

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

# 1 つの文字列を出力 (paizaランク D 相当)
https://paiza.jp/works/mondai/d_rank_level_up_problems/d_rank_level_up_problems__stdout_1
### 自分の解答
“`ruby:practice_01.rb
puts “paiza”
“`
末尾に改行を入れなければならないので、`print`ではなく`puts`を使う。
### ChatGPTの解答
もちろんです。質問の内容が不足しているようですが、とりあえず “paiza” という文字列を1行で出力するRubyのコードを以下に示します。
“`ruby
puts “paiza”
“`
このコードを実行すると、”paiza”という文字列が1行で出力されます。

# 2 つの文字列を出力 (paizaランク D 相当)
https://paiza.jp/works/mondai/d_rank_level_up_problems/d_rank_level_up_problems__stdout_2
### 自分の解答
“`ruby:prac

元記事を表示

画像投稿プレビュー機能

# はじめに
プログラミング初心者です。
温かく見守ってください。
# 画像投稿プレビュー機能
画像投稿を以前実装しました。
これにプレビュー機能を実装したいと思います。
### 事前準備
まずはJavaScriptが読み込まれるようにします。
・appディレクトリ→JavaScript内にprevire.jsのファイルを作成します。
・config/importmap.rb
“`
pin “preview”, to: “preview.js”
“`
・app/javascript/application.js
“`
import “preview”
“`
#### コードを実際に書きます
“`js
const preview = () => {
// 新規投稿・編集ページのフォームを取得
const postForm = document.getElementById(‘new_post’);

// プレビューを表示するためのスペースを取得
const previewList = document.getElementById(‘previews’);

元記事を表示

【Ruby on Rails, Sprockets】app/assets/とmanifest.jsを複数配置してアセットパイプラインを走らせたい!🏃‍♂️💨

こんにちは、akitoshigaです。

先日、アセットファイルを`app/assets/**`以外の場所に配置した上で`manifest.js`を利用して複数の場所からアセットパイプラインを走らせる必要が生じたのですが、類似の事例が見つからず自身が実践した方法を共有します。

## 1. 前提:アセットパイプラインとは
アセットパイプラインとは、アセットファイル(画像・CSS・JavaScriptなど)を効率的に配信するためのフレームワークでありRuby on Railsに組み込まれています。

複数のCSSファイルを圧縮して一つにまとめたり、フィンガープリントを利用したキャッシングの管理をしてくれます。

アセットパイプラインは内部で`sprockets`や`importmap-rails`というgemを利用しています。

詳しい説明はRailsガイドをご覧ください。

https://railsguides.jp/asset_pipeline.html

## 2. やりたいこと
下記のように、Ruby on Rails指定のアセットファイルの置き場である`app/assets/

元記事を表示

関数脳を身につけろ!「First-class Function (第一級関数) 」

![kansu.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633992/8e695324-4179-5b7c-b6ed-ea0edf43cf8b.jpeg)

エスプリフォートでは、業務内でのシステム開発以外でも、日々アンテナを張りながら仲間同士お互いに技術力を磨き合っています。
そして高めた技術力を顧客のために如何に生かしていくのかということを考え、顧客から頼られる存在としてあり続けています。

今回は「第一級関数」をご紹介いたします。

# 第一級関数とは

第一級関数とは、関数を「第一級オブジェクト(first-class object)」として扱うことができるものを指します。

では、この「第一級オブジェクト」とは、何でしょうか?
ざっくりと説明すると、これは、以下の特徴を持つオブジェクトの事を指します。
(ここでいうオブジェクトとは、プログラム言語の要素、と思ってください)

+ 変数に代入できる
+ 関数のパラメータとして渡すことができる
+ 関数の戻り値として返すことができる

元記事を表示

gemでrailsがインストールできなかった話。

レアケースです。

# エラー
ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.

# 原因
俺は馬鹿だからよくわかんねぇけど、rbenv配下のrubyを使わず、システムにあるrubyを使っていることが原因らいい。。

# 根本原因
/.bash_profile内のhomebrewのパスの指定ミス。
brewのパス→rbenvのパス出通すべきところがrbenvのパス→brewのパスの順になっていた。

# 解決方法
rbenvはbrewの配下にいるべき人間なので、brewのパスをrbenvのパスの上に持ってくる。
(コマンドの擬人化)

## 感想
・調べてたら、M1macはみんなzshのシェル使ってる。(不安)
 小学校の家庭科の授業で自分だけおばあちゃんから借りたエプロンを使っているかのような不安。

元記事を表示

【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行で出力し

元記事を表示

OTHERカテゴリの最新記事