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

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

通知機能つけてみた

概要

ToDoアプリに「いいね」や「コメント」などがついた時の通知を受け取れるようになるためのコードを書いた。
前提として通知させたい機能は既に制作したものとする。
model => controller => view の順でプログラムしていこうと思う

完成イメージ


model

“`ruby:create_notices_rb
class CreateNotices < ActiveRecord:

元記事を表示

【Rails】local: trueとは?

# local: trueとは
Railsにおける`local: true`は、リンクやフォームなどのHTML要素で使用されるオプションの一つで、リンクやフォームの送信をローカルなリクエストとして扱うことを指定します。

通常、Railsではリンクやフォームを生成する際に、外部のURLや他のサーバーに対してリクエストを送信するようになっています。しかし、`local: true`を使用することで、そのリンクやフォームの送信を現在のアプリケーション内で処理されるローカルなリクエストとして扱います。

例えば、以下のように`link_to`ヘルパーを使用してリンクを生成する際に`local: true`を指定することができます。
“`html
<%= link_to "Home", root_path, local: true %>
“`
この場合、`root_path`へのリンクがクリックされたときに、そのリクエストはローカルなリクエストとして処理されます。つまり、ページ遷移が発生せず、**現在のページ内でリクエストが処理される**ようになります。

このオプションは、特にAjaxを

元記事を表示

住所から市区町村を抜き出すのに苦労した話

## はじめに

実務で住所を使った処理を実装することがあり、そこで苦労したため、今後同様の対応で苦労しないように記載しました。

## 苦労したこと

以下のようにお客様の住所の都道府県と市区町村の情報を入力するフォームは元々ありました。そのフォームから入力されたデータを使用したバッチ処理を実装することになりました。すでに作成されたテーブルの中にある都道府県と市区町村を取得したかったのですが、市区町村のデータを取得するのに苦労しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673263/d49cd96b-f8bb-213d-7474-318504c990a0.png)

なぜなら、市区町村部分は以下のような形式で入っていたため、「さいたま市北区」だけを取得したいという処理が想像以上に難航しました。

“`
さいたま市北区ホゲホゲ1-1-1
“`

最初は正規表現で市区町村部分だけ取得すればよいのでは?と思い、調べていたところ以下の記事を見つけま

元記事を表示

DockerでRubyの開発環境を構築してみた

## はじめに
幾度となく煎じられてきたテーマなので、

「そんなん知ってるわ!」

という方はブラウザバック推奨です。

自分は、この議題について煎じたことがありませんので、n番煎じをしようと思います。

## 背景
先日、`Ruby Association Certified Ruby Programmer Silver version 3`を取得しました。
– `Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応`
– 公式ドキュメント

上記、2つが手元にあれば、あとは公式の模擬問題集を繰り返すだけで合格できる内容だったと思います。
詳細は、気が乗れば合格体験記として記事にしようと思います。

次の目標として、`Ruby Association Certified Ruby Programmer Gold version 3`の取得を目指しております。
メソッドを丸暗記で合格できたSilverに対して、Goldではオブジェクト指向プログラミングをはじめ、メタプログラミングという私がこれまで触れたことのない知見が問われる内容となっているので、どうしても

元記事を表示

【Ruby】attr_accessorで挫折した

# 初めに
こんにちは!

Ruby Silver合格に向けて問題集RExの復習でアウトプットします。今回は、書き取り用?読み取り用?ゲッター?セッター?という専門用語が巡って脳疲労がピークに来たので実際にirbで動かしたコードを簡単に整理してみました。

# attr_reader
attr_readerメソッドはクラス内で定義して “`attr_reader :name“` と書けば、以下メソッドに定義している“`@name“`にアクセスできます。注意点は、“`@name“`をクラスの外部から変更できません。

“`ruby
class Human
attr_reader :name

def initialize(name)
@name = name
end

end

human = Human.new(“サラー”)
puts human.name
human.name = “ソボスライ” # クラスの外部から変更
puts human.name # NoMethodErrorになる
“`

# attr_writer
クラスの外部からイン

元記事を表示

【Rails】テキストボックスの数を好きに増やしたり減らしたりしてみる

どうもこんにちは。

今回は、Railsでフォームを作る時に使用するGemの「`nested_form`」について解説します。

# テキストボックスの数を増やしたり減らしたりってどういうこと?

以下のようなフォームがあるとして、「追加」ボタンや「削除」ボタンをクリックしたときに、対象の要素を追加したり削除したりすることを今回は実現します。

![スクリーンショット 2024-02-09 11.32.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711491/7ab30aef-5ea7-04d8-9e69-3b1ba2a2cb5d.png)

# 実装手順

## 1. Gem導入

“`Gemfie:Gemfile
gem ‘nested_form`
“`

“`sh
bundle install
“`

## 2. ビューファイルを作成する

“`erb:app/views/content_groups/edit.html.erb
<%= nested_form_for @con

元記事を表示

RubyでCSV出力

## まえがき

実務でデータをcsvにまとめて、出力してほしいといわれた。
今回はPostというオブジェクトのデータをcsvに出力してみる。

#### 使用技術
– CSV(Ruby組み込みライブラリ)
https://docs.ruby-lang.org/ja/latest/library/csv.html

## 手順

– rakeタスクの定義
– csv出力ロジックの製造
– タスク実行

## 1, rakeタスクの作成

以下コマンドで“`lib/tasks/csv.rake“`が生成される。

“`ruby
$ rails g task ファイル名
$ rails g task csv
“`

“`lib/tasks/csv.rake“`の中身は以下のようになっている。

“`ruby
require ‘csv’

namespace :csv do

end
“`

試しにhelloを出力するだけのタスクを作成する。

“`ruby
desc “test”
task greet: :environment do
puts “hello”
end

元記事を表示

指定された位置に文字列を追加する

>文字列 S , T と、整数 N が与えられるので、 S の N 文字目の後ろに T を挿入した文字列を出力してください。

というプログラム問題をRubyで解きました。

“`ruby
str1 = gets.chomp
str2 = gets.chomp
num = gets.to_i
ans = “”
array1 = []
hcount = str1.size()
for i in 0…hcount do
w_str = str1[i].to_s
array1.push(w_str)
end

array1.insert(num,str2)
N = array1.size()
for j in 0…N do
w_str2 = array1[j].to_s
ans = ans + w_str2
end

puts ans
“`

baseという文字列にballという文字列を文字列の4要素目に挿入しました。

![ruby1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

【Rails】パーシャル(部分テンプレート)内での変数の使用

# はじめに
この記事では学習中に出会ったエラーとその解決までの道のりを自分のために記録しています。
初学者のため、理解が不十分なところがあるかもしれません。
その場合はご指摘いただけると幸いです。

# 起こった問題
パーシャルにローカル変数を渡そうとしたが上手くいかなかった

# 結論
localsオプションを使用してローカル変数を渡すときは
“`
<%= render partial: ‘パーシャル名’, locals: { ローカル変数名: インスタンス変数名} %>
“`
の**partial**を省略せずに書く
またはpartialを省略するならlocalsも省略する

# 解決までの道のり
### 前提条件
– Solidusを使用してECサイトを作成中
– 商品カテゴリーページへのリンクを含むヘッダーをパーシャル化

### なぜパーシャル内でインスタンス変数を使用しないほうがいいのか?
パーシャルとコントローラーが結びついてしまうと、コントローラー内の変数を変更したときにパーシャル内の記述も変更しなければならなくなり、せっかくパーシャルとして切り出したのに使い勝手

元記事を表示

docker/docker composeでrailsアプリをdocker化する

## はじめに
dockerとdocker composeでrailsアプリをDocker化する方法について記載します。
dockerとdocker composeについては勉強している程で記載しています。

## Dockerおすすめ本
下記勉強に使用した本ですが、初学者でも分かりやすかったので共有します。

Docker&仮想サーバー完全入門 Webクリエイター&エンジニアの作業がはかどる開発環境構築ガイド
![スクリーンショット 2024-02-09 20.32.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003708/5123ba74-3c16-9c89-1dae-d090868961fb.png)

https://amzn.asia/d/b6qGAbr

## 構築環境
“`
Ruby 3.2.2
Rails 7.0.6
postgres 12
“`

## ①必要ファイルの作成を行う
以下の4つのファイルの作成が必要です。
– Dockerfile

https://docs

元記事を表示

現場で使える Ruby on Rails 5速習実践ガイドを読んだ

## はじめに
今回はRailsのインプット用の教材として[現場で使える 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=7NL117JN69F3&keywords=Rails&qid=1642106965&sprefix=rails%2Caps%2C252&sr=8-6)
を読んだので、その感想について記事にします。

## 良かった点
Railsの機能について実際にアプリを作ってみながら解説するという流れで
解説していてわかりやすかったです。
テスト

元記事を表示

【Ruby,Rails】長いメソッド名をわかりやすい名前に変えて使用してみよう

どうもこんにちは。

今回は、Ruby,Railsでメソッド名を自分のわかりやすい名前に変更して使用する方法を紹介します。

# メソッド名を変更して使用する方法

大きく分けて2つです。

1. `alias`や`alias_method`を使用する
1. 独自のメソッド名変更メソッドを用意する

ただし、`alias`や`alias_method`は全てのメソッドに対して使用できる訳ではありません。
以下のメソッドに対して`alias`や`alias_method`を使用することができます。

1. **明示的に定義されたメソッド**: クラス内で明示的に定義されたインスタンスメソッドやクラスメソッドには、通常、エイリアスを定義することができます
1. **継承されたメソッド**: スーパークラスから継承されたメソッドに対してもエイリアスを定義することが可能です

一方で`alias`や`alias_method`を使用できないメソッドは以下のようなものです。

1. **動的に生成されるメソッド**: メタプログラミング技術やフレームワークの内部機構によって動的に生成されるメソッ

元記事を表示

Rubyの並列化で激オソご注意!!

ローカル環境で高速だった処理が本番環境で激オソになる目にあいましたので共有です。

## 結論
Rubyで処理速度を向上させるために、Parallel gemの Parallel.map を使ってスレッド並列化を試みたものの、ローカル環境では問題なかったのに本番環境で劇的に遅くなってしまった経験はありませんか?

実は、Parallel.map はデフォルトでプロセス並列化を行うため、アクセス数の多い本番環境ではプロセスの立ち上げコストが大きな負荷となり、処理速度が低下してしまう可能性があります。

スレッド並列化で3分→3秒!本番環境で劇的な速度向上を実現

この記事では、Parallel.map によるプロセス並列化の落とし穴と、in_threads によるスレッド並列化で3分→3秒という劇的な速度向上を実現した体験談をご紹介します。

## Parallel.mapによるプロセス並列化の落とし穴

ローカル環境では、Parallel.map を使用して4つのスレッドで処理を行ったところ、処理時間は約30秒と高速でした。しかし、本番環境では2つのコアに対して4つのプロセスを立ち上げ

元記事を表示

アソシエーションのthrough, sourceオプションを図として理解する。

# きっかけ
Railsを使って掲示板をブックマークする機能を実装する勉強中、中間テーブルを絡めたアソシエーションの理解に苦しんだ。
特に、後述の`bookmarked_boards.destroy(board)`と、`bookmark.destroy(bookmark)`が同じ意味であることのイメージができなかった。
図としてイメージをすることでさらに理解を定着させたい。

:::note warn
※部分は独自の解釈が含まれるので、間違いであればご指摘いただけると幸いです。
:::

# 環境
ruby 3.14
rails 7.0.3.1
mac OS Sonoma 14.2.1
docker 24.0.7
docker compose v2.23.3-desktop.2

# したいこと
* 多対多のアソシエーションにおけるthroughオプションと、sourceオプションを理解する。
* `bookmarked_boards.destroy(board)`と`bookmarks.destroy(bookmark)`が何故同じ結果になるのかを図で理解する。

# 今回のポイン

元記事を表示

【Ruby on Rails】rails g コマンドが反応しないことに関して

現在スクールで学んでいます。
Ruby on Rails学習中に新たにアプリ作成しようとした際に、つまづいたことを備忘録としてこちらで共有します。追記や修正等ありましたら、ご指摘いただけるとありがたいです。

### 環境
・MacBookAir 13インチ M1(2020)
・OS:Sonoma 14.3
・メモリ:16GB
・Rails: version 6.1.7.6

### 概要
 Ruby on RailではControllerやModelを新規で作成する際に、コマンドから簡単に作成することが出来ます。その際にrails g または、rails generateというコマンドをターミナル上で実行します。

### 状況

“`zsh
$ rails g model post title:string content:text
Running via Spring preloader in process 82269
invoke active_record
create db/migrate/20240208095330_

元記事を表示

【Rails】データの状態遷移をわかりやすく定義できるGem「AASM」

どうもこんにちは。

コード理解を進めている中でAASMというライブラリが何者なのか知る必要がありそうなので、調べてみました。

# AASMについて

ChatGPTに聞いてみたところ、以下のような返答が返ってきました。

> `AASM(Acts As State Machine)`は、オブジェクトの状態を管理し、状態間の遷移を定義するためのRubyライブラリです。このライブラリを使用すると、モデルの状態遷移を宣言的に記述でき、コールバックや条件付き遷移などの高度な機能を利用することができます。

ちょっとよくわからなかったですが、よく調べてみると、
**データの状態を変更する前と後で明示的に処理を分けることができてメソッド化できる**ライブラリということです。

これは実際にコードを書いて理解するのがわかりやすそうです。

## modelを用意

以下のようにテーブル,モデルを用意します。

contentsテーブル
| カラム名 | 型 |
| — | — |
| id | integer |
| title | string |
| status | integer

元記事を表示

エンジニア学習日記

Ruby基礎
https://note.com/takane_konbu/n/n282f98af7110

元記事を表示

Ruby +α メモず

# はじめに
メモ群なので、気になった見出しをご覧ください!
# メモず
## Rubyのファイル名はすべて小文字
例:`my_script.rb`
スネークケースと呼ばれる、「小文字 & `_`」で命名するのが一般的。
これはRailsも同じ。

### 他の言語の命名規則
#### JS:キャメルケース / ケバブケース
例:`myScript.js` / `my-script.js`

#### Java:パスカルケース
例:`MyClass.java`

## 複数行コメントアウト
=begin から =endまで
ただし、インデントすることができない(らしい)
よって、コードの中では`#`を使うのが一般的で、
=begin / =endはドキュメントコメントとして使用されることが多い。


“`rb
def my_method
p “Hello, World”
=begin
ここがコメント
複数行でも大丈夫
インデントはできない
=end
# あるいは、これがコメント
# これもコメント
end
“`

## irb 1行ずつ実行(デバック・簡易試行)
`irb

元記事を表示

VSCode + Docker + Docker-compose +Railsのデバッグの設定方法

# 概要
`Dev container`の環境を作らず、ステップ実行でデバッグが出来る環境を作成しました。今回は、その方法を記載します。

# 事前設定
以下がインストールされている事が前提です。
– **Docker Desktop**
– **Visual Studio Code**
– **VSCode rdbg Ruby Debugger**

# ディレクトリー構成
“`sh
.
├── db/
│ ├── conf/
│ │ └── .env   
│ └── postgres_volume # ← コンテナー起動時に自動生成
├── web/
│ ├── vscode/
│ │ └── lanuch.json
│ ├── # rails関連のファイル
│ ├── Dockerfile
│ ├── Gemfile
│ └── Gemfile.lock
└── compose.yml
“`

# 環境構築
– `Dockerfile`の構成は下記
“`Dockerfile
FROM ruby:3.2.2
ENV LANG=ja

元記事を表示

Ubuntu 22.04 で Rails 4.2 を動かすには?

あるRailsアプリケーションを8年ぶりに動かそうとしています。
実行環境は、WSL上の Ubuntu 22.04 です。動かせるでしょうか?

8年前は2016年、Rails 5.0 がリリースされた年です。
残念ながら、このアプリケーションのRailsのバージョンは`5.0`ではなく、`4.2`でした。
Rails 4.2 がサポートしているRubyのバージョンは`2.2`です。

## 問題

Ubuntu 22.04 では Ruby 2.2 が動きません。正確には `gem install` できません。
実行すると次のエラーが出ます。

“`sh
►gem install bundler
ERROR: While executing gem … (RuntimeError)
Marshal.load reentered at marshal_load
“`

実行したときに、このエラーが出ずにsegmentation faultすることもあります。

Ruby 2.2には`bundler`が含まれません。
`gem install`できないと`bundle

元記事を表示

OTHERカテゴリの最新記事