Ruby関連のことを調べてみた2021年10月06日

Ruby関連のことを調べてみた2021年10月06日

変更内容を非難させる git stash でやらかしたこと

過去にgit addしていて、コミットしていないファイルについてはgit stashで対応できますが、過去にgit addしたことのないマイグレーションがある状態でgit stashをしてブランチを切り替えて作業することはNG

“`zsh
Untracked files:
(use “git add …” to include in what will be committed)
db/migrate/20211004063538_add_order_number_to_cards.rb
“`

この状態で、git stashを行っても追跡されていないファイルにマイグレーションファイルが存在し、切り替えたブランチ先に追跡されていないマイグレーションファイルを持ち込んでしまう。

この際のエラーが出た場合は、2パターン解決策がある
# ロールバックをして、データベースの整合性を取る方法

“`zsh
$ bin/rails db:status

database: db/development.sqlite3

Status Migrat

元記事を表示

RalisのMVCモデルを分かりやすくどう説明するか

##はじめに

どうも、27歳未経験からエンジニア転職を目指しているもきおです。

これは当時プログラミングスクール卒業したての頃、エンジニア採用面接でのお話

**面接官**「えーそれではMVCモデルを説明してもらえますか?」
**もきお**(はい、来たその質問。)「モデル,ビュー,コントローラーの略で情報処理をこれら3つで分割して行うモデルのことです。コントローラーが情報を受け取り、DBとの連携が必要な場合はモデルとやりとりを行います。その後、必要な情報をビューに表示させるという流れです」(よし、ちゃんと言えた。ドヤっ)
**面接官** 「えーじゃあMVCモデルをここにいるIT知識の乏しい人事の方にもわかるように説明してみてもらえますか?」
**もきお**(おっと、その展開は聞いてない。)

こんな感じでその企業からは内定はいただけたのですがMVCモデルをIT知識があまりない方に対しても分かりやすく伝える事ができず、悔しい思いをしました。

ここで今回はMVCモデルを分かりやすく伝えるためにはどうすれば良いか考えていきたいと思います。

##MVCそれぞれの役割
まず改めてMVCそ

元記事を表示

[Ruby]継承について初心者なりに解説してみた

# はじめに
本記事では、`継承`について記述します。
(まず、スプラトゥーンとはイカのゲームです。)

https://www.nintendo.co.jp/switch/aab6a/index.html

# 継承
`クラスを継承`することができ、
もともと存在するクラスから`新しいクラス`を継承することができます。

“`
親クラス
↓継承
子クラス

「スプラトゥーン」
武器クラス
↓継承
スプラシュータークラス
“`

## なぜクラスの継承が必要か
`共通の部分をまとめる`ことができるため、`効率的`が良いからです。

先ほど、`スプラトゥーン`の`武器クラス`を例に挙げましたが、
さらにいうと以下のように分けられます。

(注意)継承の継承、所謂`複数の継承`は`Ruby`ではできない(後述)です。

“`
武器クラス
↓継承
シュータークラス、ローラークラス、パブロクラスなど

シュータークラス
↓継承
スプラシュータークラス、プロモデラークラス、NZAPクラスなど

スプラシュータークラス
↓継承
スプラシューター(無印)クラス、スプラシューターコラボクラス、

元記事を表示

Railsのhas_many throughの使い方を簡単にまとめました。

Railsチュートリアルの14章で出てきた**「has_many through」**の使い方をわかりやすいように、まとめていきます。
※Railsチュートリアルをやっていないと、いきなりコードを見ても理解できないかもしれないです。
まず、以下のコードを例に説明していきます。

“`ruby
class User < ApplicationRecord has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :followeds, through: :active_relationships #ここ #
end
“`

“`ruby

元記事を表示

【Rails】正規表現の基礎知識

正規表現とは、文字列の一部分を抽出・置換したり、文字列が制約を満たしているかを調べるための表現方法です。

#正規表現のメソッド
**subメソッド**

“`
irb(main):001:0> str = “りんごを食べる”
=> “りんごを食べる”

irb(main):002:0> str.sub(/りんご/,”みかん”)
=> “みかんを食べる”
“`
文字列の指定した部分を別の文字列に置き換えるためのメソッドです。
第1引数に置き換えたい文字列、第2引数に変換後の文字列を指定します。
なお操作したい文字列は`/`で囲みます。

**matchメソッド**

“`
irb(main):001:0> str = “Hello, World”
=> “Hello, World”

irb(main):002:0> str.match(/Hello/)
=> #

irb(main):003:0> str.match(/Good/)
=> nil
“`
引数に指定した文字列が、メソッドを使用した文字列に含まれているか否かをチェックするため

元記事を表示

ファビコンの設定

ファビコンの実装

自分のwebアプリ、サイトには目標となるファビコンを設定したくなりますよね。
今回は少し手間取ったのでメモとして残します。

ファビコンの作成

IllustratorやPhotoshopで作れる人は作ってもいいでしょうし、僕みたいに作れない人はファビコン専用の作成サイトとかアイコンの作成でもサイズを変えればファビコンにできるので試してみてください
僕は下のサイトを使いました。
色や、枠なども選べて使いやすかったです!

https://iconmonstr.com/

HTMLに記載

ファビコンを設定する時は、htmlファイルのhead内に記載します。

“` “`

みたいな感じです。画像のリンクか、相対パスなどでも表示できるみたいなのでプレビューなどで見て表示されるものを使ってください。

僕はawsのs3に画像を保存していたので、hrefの引数はawsの画像オブジェクトurlです。
これでファビコン実装完了です!

各デバイス

元記事を表示

Railsチュートリアルを1週してみた感想

#はじめに
**「1週目ですべて理解してやるぞ!!!」**と無謀なことを思わないほうがいいですね…

2021/9/24(金)から2021/10/5(火)まで、約1週間半ほどかけましてRailsチュートリアル6版 1週目を終えました。その感想などを書いていこうと思います。

## 勉強中に意識したこと
できる限りサンプルに出てくるコードはコピペせず、手で入力することを意識しました。
Rubyのコードを書きなれていないこと、また書いていくことでコードを読む力がつくのではないかと思ったからです。
前半〜中盤であまりに理解度が足りていないと感じたため、中盤からは**しっかり1行ずつ読んでいく**ことを意識しました。

##勉強に費やした時間
合計 11日 47時間40分(平均4時間20分/日)
実際には1日1時間しかやらなかった日もあれば、8時間以上やった日もありました。

##Railsチュートリアルに取り組む前の勉強
基本情報技術者試験の参考書を用いたコンピュータサイエンスの基礎、その他書籍などでwebアプリケーションや通信・サーバーについての勉強。その他、Linux標準教科書でLin

元記事を表示

【rails】GEM simple_calenderで「undefined method `start_time’」エラーが出たときの対処法

#概要

 ポートフォリオ作成時に、RailsのgemであるSimple Calendarを使用しまして、その際に以下の記事を参考にさせていただきました。

・https://qiita.com/isaatsu0131/items/ad1d0a6130fe4fd339d0
・https://qiita.com/AKI3/items/109d54a35c98328d9155

 しかし、undefined method `start_time’のエラーに遭遇し、解決までかなり時間を要してしまいましたので、同じ症状の方がいらっしゃれば、と思い投稿します。

#開発環境
Rails 5.2.5
ruby 2.6.3p62

#遭遇したエラー
 エラー内容は「undefined method `start_time’」です。![エラー画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962097/f4c721dd-c833-b0a5-3e31-a9ca971c86f3.png)

 エラー内容自体はよくある

元記事を表示

RspecでAWS SDKでS3の署名付きURL発行のテストをする (Ruby on Rails)

# はじめに
仕事で、Ruby on Railsを用いてS3から署名付きURLを発行する処理を実装しました。

こちらの記事を参考にして行いました。

https://qiita.com/takeyuweb/items/b32dd7487d724faac1f

そしてRspecのテストを行おうとしたのですが、以下の記事を参考にして詰まってしまったためまとめたいと思います。

[Ruby AWS SDK v2 でS3の署名付きURLを発行する](https://qiita.com/takeyuweb/items/b32dd7487d724faac1fe)

# 問題

以下のコードを実装して、テストを行おうとしました。

“`s3_download.rb
s3 = Aws::S3::Client.new
signer = Aws::S3::Presigner.new(client: s3)
signer.presigned_url(:get_object,
bucket: ‘your-bucket’,

元記事を表示

createメソッドについて!

#①.結論

createメソッドは、モデルが使用できるActiveRecordメソッドのひとつです!

保存のために、new→情報を記述→saveとしていたところが、createメソッドの引数を記述して実行するだけで保存できます!

#②.解説

下記が記述の形です!

“`php
モデル.create(カラム名: 値)
“`

たとえば、postsテーブルのtextというカラム名に、params[:text]の情報を保存します。

その場合は、以下のような書き方です!

“`php
Post.create(text: params[:text])
“`

フォームの情報はparamsに含まれています!

text: の部分がテーブルのカラム名です!

params[:text]の部分がparamsとして送られてきたデータになります!

これにより情報を保存できます!

#③.まとめ

部分的なパーツを覚えるという感じですかね!

とても便利で汎用性はあると思いますので、今後の為にも活用していきたいと思います!

何か説明で間違っていたらご指導お願い致します(_ _)

元記事を表示

[Ruby] ExceptionとStandardErrorの違いを確認する

## :gear: はじめに
PythonやJavaでは一括でエラーをキャッチする際に、Exceptionクラスでキャッチしてしまいます。
ところが、RubyではExceptionではなくStandardErrorでキャッチするのが通常のようです。

## :gear: StandardError で捕捉されるエラー

__サンプルコード__

“`rb
begin
raise NoMethodError
rescue StandardError => e
puts “#{e.class} is a StandardError”
rescue Exception => e
puts “#{e.class} is a Exception”
end
“`

__実行結果__

“`
NoMethodError is a StandardError
“`

さらに、キャッチするエラーを明示的に指定しない場合もStandardErrorが捕捉されます。

__サンプルコード__

“`rb
begin
raise NoMemoryError
res

元記事を表示

【Rspecエラー】Could not find a valid mapping for

##環境
Ruby 3.0.2
Rails 6.1.4.1
devise 4.8.0
omniauth-google-oauth2 1.0.0

##状況
Rspec実行時に下記のエラーで怒られた
(deviseのテスト設定済)

“`
Failure/Error: sign_in user

RuntimeError:
Could not find a valid mapping for #
“`

“`spec/factories/employees.rb
FactoryBot.define do
factory :employee, aliases: [:user] do
firstname { “test” }
lastname { “employee” }
sequence(:number) { |n| “1#{n}” }
sequence(:email) { |n| “tester#{n}@example.com” }
end
end
“`

##解決方法

元記事を表示

Redmine4.2をCentOS8に構築する

# ちょっとだけ自分語り(という名の保険)

– 4年目にして自分がエンジニアと自信満々に言えなくなってきた人間。エンジニアとして知ってて当然な知識も知らないことがざらにある。
– それゆえ、「常識」と言われることも記載している可能性あり。まあ、大目に見てください。

# 概要
– 今までRedmineという名前だけは聞いたことがあった。まともに触ったことはほぼない。
– そんな人間がとあるチャンスが巡ってきたことにより、1から構築することになった。その奮闘記録。

# 環境
タイトル通りのことしかかけない
– OS:CentOS8
– Redmine:Redmine4.2.2
– DB:Postgres10

# 手順
– 以下のサイトにお世話になりました。本当に先人ほど偉大なものはない。
https://vertys.net/centos-install-newly-and-create-redmine-environment/
ただ、この手順通りやってもエラーが発生し、都度都度泣く羽目になったのでその時の奮闘をメモ。

## redmineインストール
– 最新

元記事を表示

[Ruby] AtCoder過去問 B – String Rotation

##はじめに
AtCoder過去問B問題をRubyで解いてみました。
よろしくお願いします。

問題はこちらから確認してください

https://atcoder.jp/contests/abc103/tasks/abc103_b

##B – String Rotation
まずは入力を受け取ります。また答えとなる変数ansに“`No“`を代入しておきます。
sとtは一文字ずつを一つの要素とした配列として受け取っています。

“`ruby
s = gets.chomp.chars
t = gets.chomp.chars
ans = “No”
“`

この問題の回転というのがよくわからなかったのですが、一文字ずつずらしていけば、、、っという意味ですね。
つまり、一回の操作は一番最後の文字を先頭に持ってくるということです。
上記の操作をコードにすると下記のようになります。

“`ruby
s.unshift(s[s.length-1])
s.delete_at(s.length-1)
“`

unshiftというメソッドを使用して引数に配列sの末尾の文字を先頭に挿入していま

元記事を表示

Rubocopを使ったLintチェックのやり方

## Rubocopとは

Rubocop(ルボコップ)とは、Railsアプリ開発において代表的なリンターです。

リンターとは、コードが一定の規則に従っているかをチェックし、従っていなければ違反警告を出してくれるツールです。

ここのコードは長すぎるね。とか、メソッド名変えようか。とか、インデント入れたほうがいいよ。とかをコマンド1つでターミナルに吐き出しててくれます。

これによりコードの書き方を統一できるため、テストと同様に現場では必須のツールです。

## Rubocopを導入するための2ステップ

Rubocopを導入する手順を解説します。

### 手順①:Gemをインストールする

Gemは、Airbnb社が公開しているカスタマイズ済みのrubocop-airbnbというGemを使用するのがおすすめです。

普通にデフォルトのRubocopを導入してもいいのですが、デフォルトに加えてたくさんルールを追加しなければならず手間だからです。

https://github.com/airbnb/ruby/tree/master/rubocop-airbnb

という訳でインスト

元記事を表示

ruby 豆知識 ~klass~

railsのGithubを見ていたら、`klasses`,`klass`というキーワードに出会った。
これは何を意味しているんだろう、クラスのことかな?と思ったら本当にクラスのことだった。

rubyや他の言語では、`class`は予約語として定義されている。
そのため、変数名だったりとして `class`を用いることはできない。
そこで、`klass`というキーワードを使ってその変数にはクラスが渡されることを示唆しているらしい。

元記事を表示

【Rails】annotateの使い方

#annotateとは

各モデルの情報をファイルの先頭もしくは末尾にコメントとして書き出してくれるGemのこと。
カラムを確認したい時にいちいちdb/schema.rb、db/migrateを見に行く手間を省けます。
加えて、config/routes.rbにルーティング情報を書き出してくれる機能もあります。
rails routesを実行して確認する手間が省けるので、なかなか利便性の高いgemです。

# 環境

・Mac M1 バージョン11.4
・Ruby 2.6.8
・Rails 6.1.4.1

# annotateをインストール

Gemfileに以下を記述し、bundle installを実行。

“`ruby:Gemfile
gem ‘annotate’
“`

“`
% bundle install
“`

#設定ファイルを作成
以下のコマンドを実行し、annotateの設定を色々と変えられるようにコマンド打ちます。

“`
% bundle exec rails g annotate:install
“`

“`ruby:lib/tasks/auto

元記事を表示

RailsのAPI用のControllerをつくる

#RailsのAPI用のコントローラーをつくる
備忘録です。

– api/v1/mobile/以下に`dictionaries_controller.rb`を作成したい。
– jsやviewやhelperを作成したくない。

場合のコントローラーの生成方法です。

““
rails g controller api::v1::mobile::dictionaries –skip-assets –skip-helper –skip-templete-engine
“`

元記事を表示

本番環境だけNoMethodError undefined method

![スクリーンショット 2021-10-05 9.48.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653881/dfc014d0-de0f-1b61-bcc4-2663a71abf39.png)

このように本番環境だけ、undefined methodエラーがでた。

trades_countカラムをローカルで追加したので、

本番環境のターミナルで

“`
rails db:migrate RAILS_ENV=production
“`

を実行すれば本番環境でカラムが追加されるので、
エラーが解決できる。

元記事を表示

【Rails】Slim-railsのメモ

##概要
Ruby製のHTMLテンプレートエンジンであるslimを使えるようにするGem。Slimはコーディングを速くするだけでなく、コードを読み込むスピードも速くなる。

##手順

###インストール

Gemfile

“`
gem ‘slim-rails’
“`

bundle installh後、viewファイルの拡張子を「html.slim」に変更。

###実装例

html.erbの時

“`
<% @posts.each do |a| %>

<%= a.title %>

<% end %>
“`

slim-rails適用後

“`
– @posts.each do |a|
p = a.title
“`

###ポイント

– <% %> というruby記法の使用宣言が、「-」となっていること
– <%= %> というruby記法の使用宣言 + 出力が、「=」となっていること
– 閉じタグが不要なこと(段落によって閉じタグを判断する)
– `

~~

`という記法が、「p」となっていること(HTMLタグの<> や、閉じタ

元記事を表示

OTHERカテゴリの最新記事