Ruby関連のことを調べてみた2023年01月29日

Ruby関連のことを調べてみた2023年01月29日

railsで住所の自動入力について

# 全体の流れ
1. jQueryプラグインのインストール
2. gemfileにライブラリのインストール
3. colmnを追加
4. modelの編集
5. controllerの編集
6. viewの編集
7. application.jsの編集
8. エラーについて

## 1. jQueryプラグインのインストール
[jpostal](URL “https://github.com/ninton/jquery.jpostal.js”)
![スクリーンショット 2023-01-28 18.31.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115929/441e44c8-861c-b4ce-54a7-f467f973fcf0.png)
![スクリーンショット 2023-01-28 18.33.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115929/fe9ac471-5fbe-a79b-7bc0

元記事を表示

部分テンプレート

# 部分テンプレートとは
– 繰り返し使用するコードを取り出してひとつのファイルで管理できる仕組み

# 部分テンプレートの作成
– 部分テンプレートとして運用するファイル名の先頭に_(アンダースコア)をつけるだけ
“`
_〇〇.html.erb
“`
### 部分テンプレート内の記述について
– 部分テンプレート内では、インスタンス変数を使用するのは適切ではないためローカル変数で記述する。

# 使い方
“`
# 基本の記述
<%= render [部分テンプレートファイルの指定], [ローカル変数]:[渡す値] %>
# 使用例
<%= render partial: "ディレクトリ名/〇〇", locals: { post: @post } %>
# これで部分テンプレートのなかで、postのなかに@postを格納できる
“`
– renderメソッド
部分テンプレートを呼び出すメソッド

– partialオプション
renderメソッドで使用
オプションで部分テンプレート名を指定して、部分テンプレート呼び出せる。

– localsオプション
renderメソッド

元記事を表示

正規表現の否定先読み、OR条件

“`
/\A(?!.*(\.{2,}|\.{1,}@)).*\z/
“`
文中に連続の.(ドット)または@(アットマーク)前に一回以上の.(ドット)が来ると否定できるようになった。
以下の出典先を真似して書いてみた。

# OR条件
“`ABC|DEF のように書くと、「文字列ABC、または文字列DEF」という OR条件 の意味になります“`

# 出典
https://qiita.com/jnchito/items/6f0c885c1c4929092578#:~:text=ABC%7CDEF%20%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%9B%B8%E3%81%8F%E3%81%A8%E3%80%81%E3%80%8C%E6%96%87%E5%AD%97%E5%88%97ABC%E3%80%81%E3%81%BE%E3%81%9F%E3%81%AF%E6%96%87%E5%AD%97%E5%88%97DEF%E3%80%8D%E3%81%A8%E3%81%84%E3%81%86%20OR%E6%9D%A1%E4%BB%B6%20%E3%

元記事を表示

Ruby 引数

# 引数とは
メソッドに渡すことができる値のこと。

# 実引数と仮引数
“`ruby
def メソッド名(仮引数)
# 処理
end

# メソッドの呼び出し
メソッド名(実引数)
“`
メソッドを定義したときに()内に記述しておき、処理に利用するときは***仮引数***。
メソッドを呼ぶときに()内に渡す値を記述するのが***実引数***があります。

“`ruby
def メソッド名(第一引数, 第二引数)
# 処理
end

メソッド名(第一引数, 第二引数)
“`
引数は複数利用されることがあります。
そんなときは、()内、左から順に第一引数、第二引数、第三引数…と呼びます。


“`ruby
def get_weather_forecast(weather)
puts “明日の天気は#{weather}です”
end

get_weather_forecast(“晴れ”)
“`

“`
# ターミナル出力
明日の天気は晴れです
“`

– この例の場合、実引数=”晴れ”、仮引数=weatherですね。

元記事を表示

配列をactiverecordへ変換する

# はじめに
find_in_batchesメソッドはactiverecordに対してのみ使用できるので配列をactiverecordへ変換したい

# 方法
配列に格納されたデータのidのみを別の配列に格納する
(push・・・配列に要素を追加)
“`
@channel_ids = []

channels = user.channels
channels.each do |channel|
@channel_ids.push(channel.id)
end
“`

idのみを格納した配列をwhere句へ指定して、再度データを取得することでactiverecordへ変換したデータが取得できる
“`
target_channels = Channel.where(id: @channel_ids)
“`

# 参考文献
もっと簡単に書けました
“`where(id: user.channels.map(&:id))“`

– [Railsで配列をActive Record Relationに変換したい](https://qiita.com/fgem28/items/25

元記事を表示

Ruby on Rails Webアプリケーションの雛形を作ろう

# アプリケーションを立ち上げるときのコマンド
条件
– Railsのバージョンは6.0.0を用いる
– アプリケーション名は、「output_projects」
– データベース管理システムにMySQLを使用する

“`
rails _6.0.0_ new output_projects -d mysql
“`

# データベースを作成するためのコマンド

“`
rails db:create
“`
サーバーサイドは、アプリケーションとデータベースがセットで存在しています。
アプリケーションにおいて、データベースは必要不可欠なものです。

# ローカルサーバーを起動するコマンド
“`
rails s
“`
sはサーバーのsです。

元記事を表示

ActionView::MissingTemplate in Devise::Registrations#Newエラー

# エラー内容
`devise`を導入し、ユーザー新規登録画面とログイン画面を実装中のこと。
viewsファイルで`<% render %>`を用いて
部分テンプレートを呼び出そうとした際に発生。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/fa9c384b-6709-965c-5bb8-382fb97260c8.png)

現在の階層↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/26b3001b-1d71-caa1-93a3-13d2bbb8af27.png)

# 仮説

– 誤字脱字の確認
– renderの呼び出し方法(階層位置の確認)

上記ではエラー解決に至らず。

[Qiita](https://qiita.com/pontarou194/items/47e130e9c7e08225f109)で調べたところ

~~~ruby
<%

元記事を表示

&. (ぼっち演算子)

# はじめに
ぼっち演算子をつけるべきか、つけないべきかよく迷うのでメモ

## ぼっち演算子
オブジェクトに対してとあるメソッドを呼び出した時
そのオブジェクトがnilでない場合・・・実行結果を返す
nilの場合・・・nilを返す

## 使い方
“`オブジェクト&.メソッド“`

## 迷いポイント
.&のまえのオブジェクトがnilの可能性がある場合につける

①userがnilの可能性がある場合・・・すべてのメソッドの前にぼっち演算子が必要
user&.infomation&.credit&.id

②userがnilの可能性がない場合・・・userのうしろにぼっち演算子は不要
user.infomation&.credit&.id

③userとuserに紐づくinfomationもnilの可能性がない場合・・・userとinfomationのうしろにぼっち演算子は不要
user.infomation.credit&.id

## まとめ
&. (ぼっち演算子)をつけるのは.&のまえのオブジェクトがnilの可能性がある場合のみ!!
※色々なところにつけると、コードを見た人

元記事を表示

rails db:create 違うdevelopment生成

# はじめに

フリマアプリ作成時に`rails db:create`実行時に
アプリ名ではない`development`が作成されてしまうエラーが生じました。

# 仮説
調べたところ↓
https://prograshi.com/framework/rails/change-db-name/

`database.yml`での設定がおかしい様子。

~~~
development:
database:○○○○○○_development

test:
database:○○○○○○_test
~~~

と修正後
`bundle install`
`rails db:create`実行後

無事、解決できました。

元記事を表示

Ruby で解く AtCoder ABC012 D Numo::NArray ワーシャル–フロイド法

# はじめに
AtCoder さん、ありがとうございます。
# D – バスと避けられない運命
https://atcoder.jp/contests/abc012/tasks/abc012_4

**ワーシャル–フロイド法**は、最短経路問題で利用されます。

https://ja.wikipedia.org/wiki/%E3%83%AF%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%AB%E2%80%93%E3%83%95%E3%83%AD%E3%82%A4%E3%83%89%E6%B3%95
# Ruby Numo::NArray なし
“`rb
n, m = gets.split.map(&:to_i)
ab = Array.new(n) { Array.new(n, 1000000000) }
n.times do |i|
ab[i][i] = 0
end
m.times do
a, b, t = gets.split.map(&:to_i)
ab[a – 1][b – 1] = t
ab[b – 1][a – 1] = t
end
n.

元記事を表示

Slack::Notifierをrspecでmockする

SlackNotifierのmock方法の記事が見つからなったため書いてみました。

“`rb
let(:slack_mock) { double(‘slack’) }

subject { #処理を定義 }

# pingレシーバーを定義
before(:each) do
allow(Slack::Notifier).to receive(:new).and_return(slack_mock)
allow(slack_mock).to receive(:ping)
end

it ‘Slack通知が実行されない’ do
expect(slack_mock).to receive(:ping).never
subject
end

it ‘Slack通知が1回呼び出される’ do
expect(slack_mock).to receive(:ping).once
subject
end

# メッセージまで検証したい場合は下記の通り

it ‘Slack通知に想定メッセージが渡され実行される’ do
expect_message = “test”

元記事を表示

[Rails7]kaminariを実装するときに起きたエラーと対処法

# エラー1つ目
https://qiita.com/mmaumtjgj/items/771deb2f3da3eecb4f54

こちらの記事を参考にpagenate機能を実装しようとしていたところ、undefined method `page’ for #

元記事を表示

[Rails]実務のコードは膨大すぎて大変だった。全体のコードの把握するためのコツとは。

## 実務のコードは膨大すぎて大変だった!
Railsで下記のサービスを作ったことはありますが、やはり、実務としてのコードは膨大すぎて、初めて実務に入った時は大変な思いをしました。

https://qiita.com/parkon_hhs/items/98304bc5112f0e0f6faf

私だけがわからなかったことかもしれませんが、膨大なコードを把握するために知っておくといい項目をいくつかまとめてみようかと思います。

## 環境
– Rails
– VSCode
– macOS

## Railsのコードの動きの把握
最初にRailsのコードの把握するコツを紹介します。
#### どこにも定義されてないメソッドについて
例えば`post_controller.rb`に定義されてないのに使われているメソッドがありますね。
それは主に`modelで定義されたメソッド`か`gem専用のメソッド`の可能性が高いです。

まずは`post_controller.rb`なので、`model/post.rb`を調べてみましょう。モデルメソッドがコントローラーで使われているかもしれません

元記事を表示

[Ruby&VSCode]のメソッドジャンプの設定方法

## はじめに
Javascript&VSCodeでのお馴染みの`Go to definition`(`F12`キー)機能ですが、Rubyではデフォルトではない機能ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350392/372a17e4-a88a-f7cd-6cbf-87d9815ddf15.png)

初めて実務でRailsのコードを読んだ時、メソッドを一つ一つ検索するのが面倒で、調べたら設定方法がありました。
現在はうまく活用できて作業効率アップにつながった機能ですね。

それでは、ご紹介したいと思います。

## 設定方法

1. VSCodeの拡張機能(Extensions)アイコンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350392/8d1dcf41-dbe2-6dee-6fd5-d3539e509940.png)
2. `Ruby by Pe

元記事を表示

Mysql2::Error: Table ‘users’ already exists schema.rb

# エラー内容
ユーザー管理機能を実装していた時のこと。
テーブルを作成後に、`rails db:migrate`実行時に
`Mysql2::Error: Table ‘users’ already exists`とエラー表示される。

# 仮説1
調べたところ↓
https://qiita.com/TAKE1219/items/fbc9578226771427fcdd

usersテーブルは既に存在しているよ!とエラーが出ている様子。
また、原因としてdatabase.ymlの
`encoding: utf8mb4`を `encoding: utf8`へ修正する必要がある。

修正して再度
~~~
rails db:migrate
~~~

~~~
Mysql2::Error: Table ‘users’ already exists
~~~
の表示・・・

`rails db:migrate:status`でmigrationファイルの確認。
~~~
Status Migration ID Migration Name
———————–

元記事を表示

Ruby クラスとインスタンス2

ターミナルで以下のように出力させるために、コーディングしていきます。

“`
# ターミナル
著者: 太郎
タイトル: プログラミングについて
本文: プログラミングを学ぼう!
“`

“`ruby
class Article

def initialize(author, title, content)
@author = author
@title = title
@content = content
end

def author
@author
end

def title
@title
end

def content
@content
end
end
article = Article.new(“太郎”, “プログラミングについて”, “プログラミングを学ぼう!”)

puts “著者: #{article.author}”
puts “タイトル: #{article.title}”
puts “本文: #{article.content}”
“`
***Article.new*

元記事を表示

webエンジニアを目指して

現在、SES(客先常駐)企業でフロントエンドエンジニアをしているbachikoriです。

今日からwebエンジニアへの就職を目指して頑張ったことや気づいたことを投稿できたらと思います。
初めの投稿となりますので自己紹介や現在のスキル、転職しようと思ったきっかけなどを綴りたいと思います。

# 自己紹介
現在、22新卒でSESの企業に所属しています。
大学は文系科目で情報系の学部に入りましたが、当時はプログラミングにあまり興味が持てませんでした。大学3年生後半に友達と受けたプログラミングの授業をきっかけにJavaScriptを勉強しはじめ、大阪から上京してきました。

# 現在のスキル
– HTML/CSS
– JavaScript
– React(useState, useEffect, react-router-domが使える程度)
– ruby on rails(progateの課題を全て完了した程度)

これからこちらの[gitihub](https://github.com/bachikori)に新しく学んだことを共有していきます。

# 転職しようと思ったきっかけ
現在行っ

元記事を表示

【Rails】診断機能を実装(徹底解説)

今回は診断機能を実装していこうと思います
[こちらの記事](https://x.gd/bFoP4)を応用したものになりますので、必要があればご参照ください。

# 目次
① 診断機能の実装イメージ
② 実装の下準備(診断内容の考察)
③ モデル・テーブルの作成
④ 診断するページを作成する
⑤ コントローラーを記述する
⑥ 診断結果を表示するページを作成する
おまけ① 診断結果を保存したい場合

※すぐに実装を始めたたいという人は、①・②をとばし、「③ モデル・テーブルの作成」から始めてください

###### 実装環境
ruby 3.0.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]
Rails 6.1.5

## ① 診断機能の実装イメージ

診断機能とはどういうものか、イメージを明確にしておきます

① 以下のサイトで実際に診断機能を動かしてみましょう

② 診断機能のプログラムの構造を図解します

まずは以下の写真を見てください
![image.png](https://qiita-image-store.s3

元記事を表示

Ruby クラスとインスタンス

# クラスとインスタンス

## クラスは個別の値(データ)を作るための雛形。
値の元となるもの。値の共通のルールを定義します。
よく設計図に例えられます。(ひな形、〇〇の設計図など。)

クラスの定義
“`ruby
class クラス名

end
“`
※クラスは大文字から始めます。

## インスタンスはクラスをもとにして作られる「データ」のことです。
クラスから作られた個別の値(データ)のこと。
クラスが定義した共通の属性やメソッドをインスタンスは持ちます。
実態を持ちます。

クラス(設計図)を元に、インスタンス(実態)を作るということ。
クラスは設計図なので、実際に何か行うには、クラスから実態であるインスタンスを作る必要です。

インスタンスは、クラスが使用できる***newメソッド***を実行し、生成します。

## newメソッド
newメソッドは、使用したクラスのインスタンスを生成して返す役割があります。
以下のようにして、インスタンスを生成し変数で扱います。
“`ruby
変数名 = クラス名.new
“`

“`ruby
class Ta

元記事を表示

Ruby 配列

# 配列とは
1つの変数で複数の値を持つことができる値。
配列の中には、複数の値を入れることができ、順番で値を管理します。

### 配列の宣言
“`
変数 = []
“`

“`ruby
fruits = [“りんご”, “みかん”, “いちご”]
puts fruits
“`
“`
# ターミナル出力
りんご
みかん
いちご
“`

fruitsという変数に、バナナという要素を追加してみます。

“`ruby
fruits = [“りんご”, “みかん”, “いちご”]
fruits << "バナナ" puts fruits ``` ``` # ターミナル出力 りんご みかん いちご バナナ ``` このように、配列演算子<<を使って配列に要素を追加することができます。

元記事を表示

OTHERカテゴリの最新記事