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

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

jQueryインストール

こんにちは
未経験から転職を目指すものです

今回はrailsアプリに
jQueryを入れて
画面に動きをつけていこうと
思います。

## 環境
* macOS Monterey 12.3.1
* Ruby 3.1.2
* Bundler 2.3.10
* Rails 6.1.4.7

# jQueryインストール
まずはjQueryをインストールしていきます。
rails5以前はjquery-railsというGemをインストールするのが
主流のようですが
webpacker管理するには
yarnコマンドを使用しないといけないので、
yarnを使用してjQueryをインストールしていきます。

“`
$yarn add jquery
yarn add v1.22.18
[1/4] 🔍 Resolving packages…
[2/4] 🚚 Fetching packages…
[3/4] 🔗 Linking dependencies…
[4/4] 🔨 Building fresh packages…
success S

元記事を表示

Railsのdeviseでパスワードリセット時にメールアドレス以外の値もチェック項目として使用する

# はじめに
こんにちは。
Rails書き始めて4ヶ月になりました。

今回はdeviseを使用したユーザ認証基盤において、パスワードリセット時にメールアドレス以外の値もチェック項目として追加してみました。

参考になれば幸いです:bow:

# 結論
以下では、emailとusernameの2つの値でチェックしています。

“`ruby:user.rb
class User < ApplicationRecord devise reset_password_keys: %i[email username] end ``` あとは、formでusernameもPOSTされるようにすればOKです:ok_hand: # 解説 パスワードリセット時のkeyは以下で`email`がデフォルトで設定されています。 https://github.com/heartcombo/devise/blob/main/test/rails_app/config/initializers/devise.rb#L135 こちらを上書きすることでkeyを増やすことができます。 上書きはconfig

元記事を表示

非同期時の送信ボタン制御について

# 記事の内容
非同期での送信ボタン制御を実装する中で色々と躓いたため、備忘録も兼ねて記録として投稿しました。

今回は、XMLHttpRequesを使用して JavaScript から非同期的にデータを送信する方法をご紹介いたします。

# 完成形

[![Image from Gyazo](https://i.gyazo.com/0b3d2fa3696586e4a03339fcda9dc771.gif)](https://gyazo.com/0b3d2fa3696586e4a03339fcda9dc771)

# 完成形のコード
modelオプションに設定している`@pdf`は、コントローラで定義しているインスタンス変数になります。
`gem`は`wicked_pdf`を使用しており、ここではPDFファイルを生成する処理を記述しております。

https://qiita.com/inoue9951/items/4498e5d130702d884352

※ コントローラ、フォーム部分は一部割愛しております。

“`ruby:order_page.html.erb
<%= form

元記事を表示

Ruby で Translation API を叩く

# ゴール
以下を ruby から叩く。

https://cloud.google.com/translate

[500,000 文字 / 1 ヶ月までは無料](https://cloud.google.com/translate/pricing)なので、とりあえず Translation API Basic

# 事前準備
具体的には、[こちら](https://cloud.google.com/translate/docs/setup)
– GCPのプロジェクト(課金の有効化)を作って
– 翻訳APIを有効にして
– 認証JSONファイル(サービスアカウント経由で作成)を取得する

[Translation API Basic を叩いてみる](https://cloud.google.com/translate/docs/basic/translating-text)(BasicはV2、AdvancedはV3)

# Gem から API を叩く
– [ドキュメント](https://cloud.google.com/translate/docs/reference/libra

元記事を表示

MySQLの外部キー制約(ON DELETE)を指定しているならRailsのdependentは未指定でOK!

今までMySQLの外部キー制約(ON DELETE)とRailsのアソシエーションに設定する`dependent`は、同じ挙動のものを設定しておけばいいだろうと思って特に意識せずに設定していましたが、本当にそうなのか気になったので動作を検証してみました。

# 前提条件

## MySQLの外部キー制約

今回の検証では、外部キー制約のDELETE時の挙動を検証します。
検証するのは下記の3つです。

* RESTRICT
* CASCADE
* SET NULL

外部キー制約についての詳細はMySQLのドキュメントをご覧ください。

https://dev.mysql.com/doc/refman/5.6/ja/create-table-foreign-keys.html

## dependent

dependentはhas_one/has_many/belongs_toに設定できますが、今回の検証ではhas_manyを使います。

検証するのはMySQLの外部キー制約に対応する下記の3つです。
restrict_with_errorはrestrict_with_excepti

元記事を表示

Rails6でScaffoldがエラーになる

### 環境
Rails 6.1.5
テンプレート:slim-rails 3.4.0

### viewのテンプレートをSlimにしている場合Scaffoldでエラーになる

いざScaffoldしようと思って
“`sh:
$ rails g scaffold hoge a:string b:integer
“`

とすると、modelとcontrollerは作成されるが、
“`sh:
in `model_resource_name’: wrong number of arguments (given 1, expected 0) (ArgumentError)

in `template’
“`
変なエラーが出てviewが作成されない。

# 色々調べてたどり着いたのがこちら
[Rails scaffold views throws wrong number of arguments error](https://stackoverflow.com/questions/71735314/rails-scaffold-views-throws-wrong-number-of-

元記事を表示

【Ruby on Rails】railsでスタディープラスっぽいもの作ろうとしてみた(グラフ表示)

# はじめに
自分のスキルアップのために人気アプリ、スタディープラスのトレースをしていてその過程でちょっと悩んだところがあったので備忘録として記事として残します。もし、もっとスマートな書き方があったらご教示ください。

# 実装
実装に際して前提として①基本となる投稿機能(Tweetモデル) ②deviseを用いたユーザー機能 の2つが実装されているという前提で作成を進めていきます。
また、tweetsテーブルにstrig型でtagという名前のカラムを事前に追加しておくようにお願いします。

## カテゴリの選択と追加
### 1.モデルの作成とアソシエーション
勉強した科目などのカテゴリを追加・保存するためのテーブル(tagsテーブル)の作成を行います。
コマンドプロンプトで以下のコマンドを実行してください
“`
rails g model Tag name:string
“`

“`
rails db:migrate
“`

また、アソシエーションの設定もしておきましょう!

“`ruby:tweet.rb
has_many :tags
“`

“`ruby:

元記事を表示

SOLID原則を具体例で説明

# SOLID原則

## S (Single Responsibility) 単一責任の原則

管理者とユーザーの処理を一緒に書いてはいけないという原則です。なぜなら、

・管理者に関するコードだけをいじっているのに、一般ユーザーの機能に影響が出る可能性があると、確認すべき範囲が広がってしまうから。
・管理者、一般ユーザーのコードがごちゃ混ぜになりコードが読みにくくなるから。

「管理者はここ、一般ユーザーはあっち」とすることで機能追加や運用、デバックがしやすくなります。

## O (Open-Closed) オープン・クローズドの原則

何か機能を追加するとき、既存のコードを変更するのではなく新しく追加するのが好ましいという原則です。なぜなら、既存のコードの変更は既存の機能のバグを作ってしまう可能性があるから。

例えば,createDrinkメソッドがあります。1種類のフルーツから飲み物を作ります。

“`ruby
def createDrink(fruit)
~
end
“`
ここで、2種類のフルーツから飲み物を作りたくなった場合。
悪い例。既存のコード

元記事を表示

Rails(API mode) で、passwordを持ったUserの作成

## 手順
“`sh
rails new pwsample -d postgresql –api
cd pwsampple
rails db:create
“`

`./Gemfile`のbcryptが含まれる行のコメントを外す。
“`
gem “bcrypt”, “~> 3.1.7”
“`

Userモデルとコントローラーを作成。
passwordは、`password_digest`というカラム名にする。
“`sh
rails generate model user name:string email:string password_digest:string
rails generate controller users
rails db:migrate
“`

`./config/routes.rb`に`resources :users`を追加
“`ruby:./config/routes.rb
Rails.application.routes.draw do
resources :users
end
“`

`./app/models/user.rb`に

元記事を表示

destroy action実行時にcouldn’t Item find with ‘id’=1のエラー表示

# はじめに
 実装中のフリマアプリにて、「ログイン状態の場合にのみ、自身が出品した商品情報を削除できること」という実装条件に合わせて記述したのち、商品詳細ページから削除ボタンをクリックすると、下記のエラーが発生しました。
結論、エラー内容とは関係なく、destroyアクション処理後の挙動を記述していないことが原因のようでした。
![スクリーンショット 2022-05-05 18.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655610/573f5dda-8eaf-f86c-a72c-578109c6f946.png)
 上記エラー文を確認すると、 「ItemsControllerに記載しているdestoroy actionを実行したがid1が見当たらない」といった指摘がされているようでした。

# 仮説・検証

### 仮説1
 エラー文の通り、idが受け渡されていない事が原因でエラーが発生しているのではという仮説のうえ、MVCの流れに沿って下記の検証作業を行いました。

### 検証

元記事を表示

可変長配列に要素を追加する処理の色々

# これは何?

go の slice や C++ の std::vector のようなものに要素を追加する場合に世の人々がどうするのかを調べた。

# そもそも

いわゆる可変長配列というものの代表的な実装は

* 適当にメモリ確保して、そこに要素を格納する
* 確保した容量に入らなくなったら、別の場所にメモリを確保して、そこに全部移動してから新要素を追加する

というものになっている。
この「別の場所にメモリを確保」の際にどうするのかが悩みどころ。
必要サイズぴったりにメモリ確保すると「1個追加」を1000回行った場合に絶望的に遅くなる。
多めに確保したいところだけど、多すぎるのはやっぱり損。

みんなどうしているのかなと思って調べてみた。

# 各実装

## go の slice

https://github.com/golang/go/blob/go1.18.1/src/runtime/slice.go#L193
辺りに実装がある。

1. 旧キャパシティが 256未満なら、新キャパシティは旧キャパシティの倍。
1. 旧キャパシティが 256以上なら、新キャパシティは旧キャ

元記事を表示

日銀が公開する短期プライムレートをCSV出力してグラフ化してみた

## 背景
最近マンションを購入した。住宅ローンを検討しているのだが、結局変動金利がいいのか、フラット35のような固定金利がよいのか非常に迷っている。[FRBも利上げを決めた](https://www.nikkei.com/article/DGXZQOGN033UA0T00C22A5000000/)のような記事もあり、今後の金利はあがりそうな雰囲気も感じつつとりあえず過去の金利がどのように推移したのかを確認したくなった

一般に(?)、住宅ローンにおける変動金利は短期プライムレートに連動すると言われているため[短期プライムレート](https://www.boj.or.jp/statistics/dl/loan/prime/prime.htm/)を確認したが、見た瞬間「グラフにしてくれよ」と思ってしまったので軽くHTMLパースするスクリプトを書いた

参考: [住宅ローンの金利を左右する「短期プライムレート」とは?](https://finance.recruit.co.jp/article/k083/)

## 成果物
https://github.com/shoutm/conver

元記事を表示

【ポートフォリオ開発】RubyとRailsのバージョン選定で参考にした情報

本稿では、ポートフォリオの作成で使うRubyとRailsのバージョン選びの時に参考にした情報を紹介します。

## Ruby

### リリース情報
– [Ruby公式ページ_ダウンロード](https://www.ruby-lang.org/ja/downloads/)

### バージョニングルール
– [Ruby 2.1.0 以降のセマンティックバージョニングについて](https://www.ruby-lang.org/ja/news/2013/12/21/ruby-version-policy-changes-with-2-1-0/)

## Ruby on Rails

### リリース情報
– [Rails公式ページ](https://rubyonrails.org/)
– [RubyGems railsの全バージョン履歴](https://rubygems.org/gems/rails/versions)
– [rails公式レポジトリ](https://github.com/rails/rails/releases/)

### バージョニングルール
– [Ruby

元記事を表示

rubyのアップデート②

今回も頑張っていきましょう。

今回こそは最新バージョンに。(そのために色々準備したんだから。。。)

1、バージョン確認
“`ruby:qiita.rb
rbenv versions

2.6.5 (set by /Users/teraihiroki/.rbenv/version)
“`

今日(2022/05)の時点最新バージョンが3.1.2なので

“`ruby:qiita.rb
rbenv install 3.1.2
“`

“`ruby:qiita.rb
Installed ruby-3.1.2
“`

!!!やりました。意外とあっけない。

最後にインストールした最新バージョンに変更します。

“`ruby:qiita.rb
rbenv global 3.1.2
“`

変更されたか確認します
“`ruby:qiita.rb
ruby -v

ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]
“`

これでようやく開発に向けて準備完了。かなと思います。

お疲れ様でした。ま

元記事を表示

rubyのアップデート

本日も頑張っていきましょう。

まずは前回の大きな失敗から反省。元々学校に通っていた時はmacを使っていたのに、調子に乗って前回はWindowsでやってしまったことが原因でした。
(開発ツールの環境が全然違うようで、、、macと同じやり方ではできない)

と言うことで今回から改めてmacで開始します。

1、homebrewのアップデート
  
  コマンドは
“`ryby:qiita.rb 
brew update
“`

  homebrewとは??(これがWindowsで使えない)
  
パッケージ管理システムのことで、色んなシステムを全てここで管理できるもの。使用するシステムごとに公式サイトから実行するのはかなり面倒ですし、関連性も重要なので一挙にできるシステムは非常に便利です。
  これがhomebrewと言うシステムで可能になるので、必ずこれを使用して開発を進めていきたいと思います。
  ※詳しくはキータの他の記事に詳しくあるので調べてください。

2、update中のエラー
  
  早速1でエラーが出ました。
“`ruby;qiita.rb
Erro

元記事を表示

【Rails/MySQL】RailsでMySQLを使う方法

## はじめに
Railsではデフォルトのデータベースにsqlite3を使用しています。
今回はRailsアプリケーションのデータベースでMySQLを使用する方法を紹介します。

なお、本稿はRailsの環境構築を終えた段階からの手順になるため、まだの方は以下の記事を参考にしてください。

https://qiita.com/kazunoko1606/items/334ae634af8b30e84db6

## 環境
– macOS Monterey:12.3.1
– Ruby:3.1.0
– Bundler:2.3.12
– Ruby on Rails:6.1.5
– MySQL:8.0.28

## 手順

以下の手順で進めていきます。
1. MySQLのインストールとセキュリティ設定
1. MySQLのユーザー作成
1. Railsアプリケーションの作成
1. dotenv-railsの導入
1. データベースの作成

### 1.MySQLのインストールとセキュリティ設定
まず初めに、MySQLのインストールとセキュリティの設定を行います。

https://qiita.com

元記事を表示

RubyでSPAを構築してみました

# はじめに
[RubyのWebAssemblyビルド](https://github.com/ruby/ruby.wasm)を使ってSPA(single page application)を構築するためのパッケージ”[Bormaŝino](https://github.com/keyasuda/bormashino)”を開発し、[TodoMVC](https://todomvc.com/)を[移植してみました](https://github.com/keyasuda/bormashino-todomvc)。
本記事ではパッケージの紹介及び移植されたコードを解説します。

# デモ
– TodoMVC 移植版 https://bormashino-todomvc.vercel.app/
– テンプレートアプリケーション https://bormashino-app-template.vercel.app/

# パッケージ”Bormaŝino”について
## コンセプト
> 伝統的な「フォームを表示し」「POSTされる内容でデータストアを更新し」「データストアに保持されている内容を元

元記事を表示

Ruby on Railsをgit cloneする

この記事は学習した内容をアウトプットし、更に理解を深めるための記録用投稿になります。
投稿している内容と同じ箇所で躓いている方に少しでもお力添えできれば幸いです。
## git cloneとは
そもそも[git clone]とは?
#### 『Gitに存在するリモートのリポジトリをローカルの環境にコピーする』
学習し初めの頃はなかなか[git clone]をすることがなかったですがAWSで自分のアカウントを作成して環境の構築する際に始めて出てきました。
## git cloneの流れ①〜⑥
##### ① GIt hubを開きローカルにコピーしたいリポジトリを選択しリポジトリの画面へ
##### ② 緑色の[Code]のボタンを押し「git@github.com:[ユーザー名]/[リポジトリ名].git」のSHH keyをコピーする。
##### ③ ローカルの環境を開き以下のコマンドを入力
“`
ec2-user:~/environment $ git clone git@github.com:[ユーザー名]/[リポジトリ名].git
“`
##### ④ 以下のコマンドでローカ

元記事を表示

RubyエンジニアだけどRuby Silver の対策練習問題を解いてみたい

# 問題

http://www.minituku.net/drills/775230600.html

>以下の選択肢のうち、エラーにならずに正常に実行が完了するコードを1つ選択してください。

“`rb
(a) 1..10.to_s
“`

1から10の範囲を文字列にしている。to_sでエラーが起こるのはnilぐらいで、あとは何でも文字列にできそうな気がするが。
やや安直な気もするけどこれを回答として選んだ。

“`rb
(b) 10.*(0xFace)
“`

数字の10に掛け算をして、なにかバイト列のようなものを渡してる。
いかにもエラーが起こりそうな気がするけど、これ何?

“`rb
(c) 10.+(“10”)
“`

数字の10にメソッドチェーンして + メソッドを実行し、引数に文字列を渡している。いかにもエラーが起きそうだが。

ところでRubyでは数値もオブジェクトであり、 + もメソッドとして実行できそうな気もするけれど。

“`rb
(d) Time.now.strftime(1999, 12, 11)
“`

現在時刻に対して

元記事を表示

KeyError: Factory not registered:の解決方法

# この記事で伝えたいこと

`KeyError: Factory not registered: …`というFactoryBotのエラーが出てこの記事にたどり着いた方へ。
あなたが作っているアプリはRailsアプリではありませんか?
もしそうなら、Gemfileに以下のように書いていませんか?

“`ruby:Gemfile
# これは間違い!
gem ‘factory_bot’
“`

Railsアプリの場合、以下のように **factory_bot_rails** を使うようにすることで `KeyError: Factory not registered` が起こらなくなると思いますので、お試しください。

“`diff_ruby:Gemfile
– gem ‘factory_bot’
+ gem ‘factory_bot_rails’
“`

# もっとくわしく

## この記事を書いた経緯

RailsにFactoryBotを入れる場合、本来は **factory_bot_rails** を使うべきですが、**factory_bot** を使ってしまったことで `

元記事を表示

OTHERカテゴリの最新記事