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

Ruby関連のことを調べてみた2021年09月24日
目次

[SQL]基礎的なこと

# はじめに
本記事は、SQLの基礎的な部分について記述します。
そういえば、SQLってなんだっけ?と恥ずかしながら疑問に思ったため記述します。

# SQLとは
`DBを操作する言語`です。
「Structured Query Language」の略

Structured = 構造化
Query = 問い合わせ
by Google先生

私は、Rubyを使っているので`rails db:createコマンド`や、
Sequel Pro(シークエルプロ)を使用したデータの書き換えは行ってきました。

これらの操作は、
最終的にSQLという言語が`実行されて実現する仕組み`になっており、
SQLを直接使用せずに、
「特定のコマンドの実行」や「GUI操作」を実現できます。

# SQLによるデータベースの操作
データベースやテーブルに対して命令でき、大きく以下の3つに分類されます。
– `データを定義`「DDL(Data Definition Language)」
– `データを操作`「DML(Data Manipulation Language)」
– `データを制御`「DCL(Dat

元記事を表示

rails s を実行した際に`Gem Load Error is: AddDllDirectory failed for C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/pg-1.2.3/lib/x64-mingw32`が発生した時の解決方法

#はじめに
Railsで簡単なsnsアプリを作成している際に以下の問題が発生して1日沼にはまったのでそれの過程と、同じようなことが起きても忘れないよう記録として残しておきます。
同じ問題に直面した方々の役に立てれば幸いです。

# 前提・使用環境

・Windows 10
・Ruby 3.0.2
・Rails 6.1.4.1
・Postgresql 12.8

#起きた問題
`rails s`を実行した際に
`Gem Load Error is: AddDllDirectory failed for C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/pg-1.2.3/lib/x64-mingw32`
というエラーが発生。エラーは以下の通り。

“`terminal:コマンドプロンプト
C:/Ruby30-x64/lib/ruby/3.0.0/bundler/runtime.rb:69:in `rescue in block (2 levels) in require’: There was an error wh

元記事を表示

【Rails】いいね/コメント/フォロー/DMの通知機能

#はじめに
通知機能の復習のため残しておきます。

#手順

###前提
いいね/コメント/フォロー/DM機能はそれぞれ作成済みとします。

今回は、

– post(投稿)に対するいいね、コメント
– user同士のフォロー
– フォローユーザー同士であればdm可能

という条件で機能を作成しています。

###やったこと

まず、通知の流れとして、
1.いいね/コメント/フォロー/DMのcreate時に、独自のメソッドで通知を作成
2.独自のメソッドが定義されているモデルへ行き、指定された処理を行う

いいね、コメント、フォロー、DMの順で記します。

###いいね通知

“`ruby:favorite_controller.rb
@post = Post.find(params[:post_id]) #いいねをする投稿を探す
favorite = current_user.favorites.new(post_id: @post.id) #いいねを作成
favorite.save
@post.create_notification_favorite!(current_user)

元記事を表示

lメソッドを用いた際のエラー解決:translation missing[Rails, I18n]

Railsの開発を進める中で、lメソッドを用いた際に、以下のようなエラーが発生したので、その原因と解決について記載したいと思います。
ちなみにI18nやlメソッドの詳しい利用方法に関しては、参考URLをご覧ください。

![スクリーンショット 2021-09-22 22.33.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779676/4b8e9121-a6cb-50f2-a0e0-3ea011a18388.png)

## 結論 ≒ 原因

このエラーの原因はlメソッドの引数である、`@user.created_at`のクラスが、`ActiveSupport::TimeWithZone`であるからです。

I18nを用いる場合、lメソッドを用いた際には、よしなに日本語化してくれます。(application.rbなどを正しく設定できていれば)
しかしlメソッドの引数を翻訳するルールが、今回のエラーに大きく関係しているおり、
lメソッドを用いた場合、

**Dateクラスのインスタンス**は**`

元記事を表示

[Ruby] AtCoder過去問 B – Coins

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

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

https://atcoder.jp/contests/abc087/tasks/abc087_b

##B – Coins

まずは入力を受け取ります。
改行されているのでreadlinesを使って受け取ります。

“`ruby
a, b, c, x = readlines.map(&:to_i)
“`

繰り返し文を使うので変数countを用意して0を代入しておきます。
今回のポイントは繰り返し文をネストしていくということです。

今回は先に回答を記述します。↓

“`ruby
a, b, c, x = readlines.map(&:to_i)

count = 0
(0..a).each do |i|
(0..b).each do |j|
(0..c).each do |k|
if i * 500 + j * 100 + k * 50 == x
count += 1
end
end

元記事を表示

【Rails】マイグレーションでDATE型のデフォルトを現在日時にする

レコードが作成された日時をデフォルトにカラムが作成されるようにしたい。
DATETIME型で現在日時をデフォルトに入力する方法は多々見つかったものの、DATE型については情報があまり見つからなかったのでメモする。

# DATE型で現在の日時をデフォルトにする
#### migration
“`
t.date :date, null: false, default: -> { ‘(CURRENT_DATE)’ }
“`
※`()`を忘れずに!!

#### 確認
“`
mysql> show columns from テーブル名 like “date”;
+———+——+——+—–+——————+——————-+
| Field | Type | Null | Key | Default | Extra |
+———+——+——+—–+——————+——————-+
| d

元記事を表示

Ruby + Seleniumでweb上のファイルをダウンロードする(Windows)

## きっかけ
引っ越しの準備や掃除の時など、あまり脳を使わない作業の際は耳が寂しくなります。
いつもだったら好きな音楽を聞きながら作業をしていました。
しかし、最近会社のチームメンバーから「技術系のポッドキャスト聞きながらやるのもオススメですよ」と、いいアドバイスをもらいました。
> いかなる時でも勉強しろという圧

そこでオススメされたのが[fukabori.fm](https://fukabori.fm/)でした。

なんと都合のよいことに、各回のポッドキャストをmp3でダウンロードもできます。
これなら家での作業中だけでなく、散歩中など外にいるときにもギガを消費せずにポッドキャストを楽しむことができます。

ただこのポッドキャストは2021/09時点で57回もやっています。
それをチマチマと1回ずつDLするのはめんどくさい。
ということで、お手軽に書けるRubyでまとめてDLする用のツールを作ることにしました。

## 準備
趣味用のMacとかがないのでWindowsでやります。
ということでRuby入れるところからやります。

### Ruby導入
1. RubyInstal

元記事を表示

【rails】 存在しないデータにアクセスした時の例外処理

# レコードに存在しないデータにアクセスした

作成したコントローラーに

“`profile_controller.rb
class ProfilesController < ApplicationController def show @profile = Profile.find(params[:id]) end end ``` とだけ書いて適切な例外処理を書いていない場合、存在しないデータのURLにアクセスしようとすると ![スクリーンショット 2021-09-23 14.06.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1067124/0184b12f-bfba-fd95-8d5e-f7de0e42c37d.png) ActiveRecord::RecordNotFoundというエラーが出てしまいます。 このようにレコードにデータが存在しない場合の例外処理を書いて行きます。 # rescueを用いた例外処理 `rescue`を使うと、エラーが発生した場合次に行う

元記事を表示

Rails 7 をちょこっと試す(さらば、Webpacker 編)

## はじめに

[Rails 7.0 Alpha 1](https://weblog.rubyonrails.org/2021/9/15/Rails-7-0-alpha-1-released/) がリリースされたということで、フロントエンド周りがどうなっているのか、プロジェクトを作ったときどうなるのか、ほんのちょっとだけ、調べてみました。

今回、使ったバージョンは、`gem install rails -v 7.0.0.alpha2 –pre` でインストールした[Rails -v 7.0.0 alpha 2](https://github.com/rails/rails/tree/v7.0.0.alpha2) です(2021/09/23執筆時点でリリースのアナウンスはまだ?)。

“`
$ rails -v
Rails 7.0.0.alpha2
“`

## フロントエンド関連のオプションなしで rails new する

フロントエンド関連のオプションなしで、 `rails new` してみます。

“`shell
rails new . –database post

元記事を表示

エンジニアになって1年が経過したので振り返ってみた【受託開発企業】

エンジニアになり1年が経過したので、この1年を振り返ってみようと思う。
これからエンジニアになろうとしている人、企業選びに迷っている人の参考になれば嬉しいです。

※この記事は完全に独断と偏見で書き綴りますので宜しくお願いします。

## 筆者のスペック
– 入社時は27歳
– Fラン大学卒業
– 高校、大学はまったく勉強してこなかった。(学年で下から数えられるくらいのテスト順位)
– これまでサッカーばかりやってきた(一応全国レベルではあった)
– 前職は営業(転職3回目)

こんな感じのスペック。

## そして、現在
– 受託開発ベンチャー企業に勤務
– PM補佐のような立ち位置で案件に携わることが多め
– 上流工程と言われる業務が多め
– たまにコードも書く
– まだまだ伸び代しかない
– 純粋に楽しすぎる
– 実務経験1年程度にしては割といいお給料をいただいている

## なぜエンジニアになったのか
大学卒業をしてから、営業職として働いていた。しかし、なかなか自分が思い描いていた成果やキャリアを歩めずにいたい。ある営業会社を退職後、自分のキャリアが全く誇れるものではなく絶望

元記事を表示

【個人開発】絵文字 “だけ” で日記を書いて友達とシェアするサービスを作りました。

## はじめに

プログラミングの勉強を始めて約半年、初めて作ったアプリ**『emory』**をリリースしました!

日記を習慣化させたい気持ちはあるけれど、忙しい日々の中で三日坊主になってしまう、、
新型コロナウィルスの影響で友達や所属コミュニティのメンバーと直接顔を合わせることが難しくなり、会話をする機会がなくなってしまった、、

**『emory』**は、そんな悩みを抱えている方々に使っていただきたいサービスです!!

https://www.emory.app/

## サービス概要

絵文字 “だけ” を使って日記を書き、友達と日記をシェアすることで、
コミュニケーションのきっかけを作れるサービスです。

**なぜわざわざ『絵文字だけで書くこと』に制限したのか**、2つ理由があります。
① 簡単にそして直感的にその日の感情を表現できるから
② 友達と日記をシェアしたときに、絵文字で書かれた日記なのでプライベートに踏み込みすぎることがないから

では実際に絵文字だけで書いた日記を見てみましょう!
これは私の書いた日記です。どんな一日だったのか想像できますか??
![スクリー

元記事を表示

コルーチンと継続の簡単なまとめ

# はじめに
非同期プログラミングを勉強していると、コルーチンや継続といった概念に遭遇します。なので、頭を整理するために、継続とコルーチンの簡単なまとめを書いてみました。ちなみに継続はコルーチンの上位互換で、継続を使ってコルーチンを実装できます。継続とコルーチンを詳しく知りたい方は[月刊ラムダノート](https://www.lambdanote.com/collections/n)のVol.1,No.1[^1]とVol.3,No.1[^2]を読むと良いと思います。この記事は、嘘が多分に混じっていると思います。。
# 継続

## 継続とは?
ある計算の残りの計算のことです。どこの地点からの残り?という話ですが、Schemeではcall/cc関数からリターンした後、Rubyならcallcc関数からリターンした後からです。どこまでかというと、インタプリタが終了するまで、またはプログラムが終了するまでです。継続はcall/cc(callcc)の引数として渡されます。継続を実行するためには、継続を評価します。また継続は変数に保存しておいて、callccの外で評価することもできます。さまざまな

元記事を表示

【Rails】Uncaught ReferenceError: $ is not definedを解消した話

# エラーが発生した経緯
Railsで非同期通信を用いたチャット機能を作成するにあたり、メッセージ送信時に`js.erbファイル`を呼び出すところまでは成功していた。(js.erbファイルにconsole.logで記述した内容が、検証ツールのconsoleで出力されることを確認)

しかしいざ`$(‘.message’).append〜`のような記述をしてメッセージを送信しようとすると、検証ツールのconsoleに`Uncaught ReferenceError: $ is not defined`というエラー文が表示されてしまい、非同期通信ができない。

# 結論:エラーの原因
「$なんて変数名存在しないよ!」とエラー文で言われている通り、
**jQueryを導入できていない**ことが原因でした。

# jQueryの導入方法

**①jQueryを導入したいアプリケーションのターミナルで下記コマンドを実行**

“`
% yarn add jquery
“`

**②念の為、jQueryの記述が追加されているかどうか、次の2つのファイルの中身を確認する**
・package.j

元記事を表示

[Ruby]破壊的メソッドと値渡しについて

# はじめに
本記事では、新しく知った`破壊的メソッド`と`値渡し`についてを記述します。
新しく知ったのでアウトプットしますが、
間違えている点があればご指摘いただけますと幸いです。

# 破壊的メソッド
レシーバになる`オブジェクトの値そのものを変更する`メソッド。
それ以降については、
オブジェクトの値が変更され、設定していたオブジェクトの値は破壊されてます。

“`ruby
food = “apple”
p food.upcase!
p food

# 結果は「APPLE」
“`

# 値渡し
私が学習している`Ruby`は`値渡し`になります。

`値渡し`とは、変数の値をコピーする渡し方になります。
メソッド内で値を変更しようが、結果は変わらないです。

“`ruby
def food(name)
name = orange
puts name # 結果「orange」
end

name = apple
food(name)

puts name # 結果変わらず「apple」
“`

## 破壊的メソッド実行
その場合は、`結果は変わります

元記事を表示

Rails6とBootstrap5

Rails6からはgemでjquery,bootstrapはいらないみたい。
その代わりにwebpackerを使用して、インストールする。

また、bootstrap5からはjqueryがいらない。

yarn install
$ yarn add bootstrap@next
$ yarn add @popperjs/core

package.jsonで確認できる。

application.html.erbに追加。(元から書いてあるコードは消さないよう注意。)
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>


hogehoge
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>

元記事を表示

Railsプロジェクトにおけるペネトレーションテスト指摘事項

# 0. はじめに
これまで複数の企業にてRailsプロジェクトに携わらせていただきましたが、その中で何度かペネトレーションテストを行っていただく機会に恵まれました。そこで、本記事では過去に指摘されたことのある事項を紹介したいと思います。なお、ここで紹介した指摘はすべて修正済みとなっています。

# 1. Cookieセッションでログイン
### 指摘事項
Rails.application.config.session_storeで:cookie_storeが指定されており、Cookieが盗み取られると不正ログインができてしまう

### 対策
Railsはデフォルトではセッション情報はCookieのみに保存し、サーバーサイドで保存しません。これでは、Cookieが盗み取られてしまうと不正にログインが可能となってしまいます。そこで、redisやactiverecord-session_store[^1]を利用して、セッション情報をサーバーサイド側に持たせる必要があります。
リレーショナルデータベースを利用しているのであれば、activerecord-session_storeを利用す

元記事を表示

Active Storageに画像を投稿させようしたらundefined method `upload’ for nil:NilClassがでた

EC2にデプロイしたアプリケーションが、Active Storageに画像を投稿するアプリケーションでした。
なので、AWSのS3似画像と動画を保存させる必要がありました。

そこで、AWSのS3の設定をしよとしたら、見事につまりましたので、今回は備忘録として残していきたいと思います。

#現象

アプリにログインをして、画像を投稿しようとしたら、

“`
undefined method `upload’ for nil:NilClass
“`

のエラー画面がでてきました。
Backしてみたところ、画像がリンク切れのときのマークが出てくるようになっている。

前回記事でS3についての物を出した時のように、きちんとAWSのアクセスキーとシークレットアクセスキーをセットして、きちんとS3のコンソールでパブリック・アクセスも許可していて、更にバケットポリシーも問題なく動いていました。

なんで詰まったのかなと思ったので、とりあえず

##アプリケーションそのものを再起動してみたところ無事解決しました。

一回設定したら再起動しないいけないのですね。
知らなかった。

元記事を表示

9.22 振り返り RSpecいいねのエラー>>遅延評価 「ruby標準出力(まだよくわからない)」

“`
tail -f log/test.log
“`
“`
tail で後方から指定した行数分表示できる ログが見れる
“`
https://qiita.com/tatsumin0206/items/d2d98b6e94dd4f70f4ce

https://qiita.com/sobameshi0901/items/b963e7046e2ae8b8e813

【Rails入門】loggerの使い方まとめ

“`favorite.spec.rb
RSpec.describe “Staff::Favorites”, type: :request do
let(:staff){FactoryBot.create(:staff)}
let(:ostomy){FactoryBot.create(:ostomy)}
let(:patient){FactoryBot.create(:patient)}
let(:favorite){FactoryBot.create(:favorite, staff: staff, ostomy: ostomy)

元記事を表示

【Rails】form_withに関する基本知識

# form_withメソッドとは
フォームを実装するためのヘルパーメソッドです。
ヘルパーメソッドとは、主にビューでHTMLタグを出現させたりテキストを加工するために使用するメソッドのことです。
HTMLのformタグの代わりに使用できます。

**【例】HTMLのフォーム記述**

“`



“`
↓↓これをこのように書き換えることができます
**【例】ヘルパーメソッドを用いたフォーム記述**

“`
<%= form_with url: "/posts", method: :post, local: true do |form| %>
<%= form.text_field :content %>
<%= form.submit '投稿する' %>
<% end %>
“`

ヘルパーメソッドはRubyとして取り扱われるので、表示する

元記事を表示

【Rails】Cocoonを用いて親子テーブルの内容を任意の数だけ保存する。

#この記事/メモについて

本記事では”cocoon”というgemを用いて、モデルに紐づいた子モデルの内容を同時に保存できるようにします。

具体的には以下のようにして、
menuの投稿時にhas_manyで紐づいたfoodモデルを、
またfoodモデルにhas_manyで紐づいたmaterialモデルを任意の数だけ保存できるようにします。

![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409257/1c95e397-6016-8a32-a49c-ebc9628fb38c.gif)

ここでは、表のような情報を開発者が入れる初期データとして保存していこうと思います。

menuモデル

| ID | name   | plan |
|:–:|:———–:|:————————:|
| 1 | 献立①   | 朝ごはん用  |
| 2

元記事を表示

OTHERカテゴリの最新記事