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

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

ActiveStorageでRspec実行時に生成された画像データをテスト終了後自動で削除する方法

## 概要
`ActiveStorage`で`Rspec`実行時に生成した画像ファイルをテスト終了後に自動で削除する方法をメモとして残しておきます。
`Rails`で`Rspec`を用いてテストする際に画像を生成する場合があると思います。
その際に生成されたテスト用画像データは下記のように`config/storage.yml`に設定された保存先に保存されます。

“`ruby
test: # ‘root’にテスト時に生成された画像を保存する場所を指定している
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
“`
テストを行っていくとどんどんと保存先のストレージが生成された画像で圧迫されてしまいます。
しかし、ある設定をすることでテスト終了後はストレージをクリーンアップすることができます。

## 方法
_*spec/rails_helper.rb*_

“`ruby
RSpec.configure do |config|
config.after(:all) do
FileUtils.rm_

元記事を表示

slimの使い方

# slimとは
***Rubyのテンプレートエンジン***のことです。
erbとかあると思いますが、slimを使うと書く手間が省けて、
htmlより簡潔に書くことができます。

# erbとの書き方の違い
slimの書き方の特徴を表にして行きます。

|<>|これは使わない|
|–|–|
|<% %>|= |
|<% %>| – |
|コメント| / |
|id指定|#|
|class指定|.|

このように表記して行きます。

コードで表すと下のようになります。

“`.html

slim練習

slimテスト

“`
slimにするとこうなります。

“`.slim
h2 slim練習
.content
p slimテスト
“`
書き方としてはかなりシンプルになります。

具体的に表にしてみます。

|html(erb)|slim|
|–|–|
||/|
|class=”content”|.content|
|id=”content”|#content|

元記事を表示

link_to 〜 doの役割

実務でタイトルにあるような書き方を見たので、まとめようと思います

link_toの使い方は、ご存知かと思います。もし分からないという方がいらっしゃいましたら、[公式ドキュメント](https://railsdoc.com/page/link_to)を読んでみてくださいね!

## link_to doはいつ使われるのか
下記のコードのようなときにこのメソッドは使われます
“`
<%= link_to root_path, class: "btn btn-link" do %>

メッセージ
<% end %>
“`
このように、画像を押すと指定したパスに遷移するような実装をしたいときに使えるかとおもいます。
公式ドキュメントを見ると分かるとおもいますが、link_toの引数に画像を指定することはできないんですね。
そこで、画像を押したときに指定したパスやURLに遷移するような実装をしたい時に、このメソッドが使えるんです。

短いですが、以上です

元記事を表示

cannot load such file — gemname (LoadError)

# Gemfileに無いgemをrequire

Gemfileに書いていないGemをrequireしていた。

“`
gem list
“`

でlocal gemにあるからと言って、大丈夫と思ったのですが違ったみたい。

もし、Gemfileにないが、localにあるgemを使いたいなら、
pathを$LOAD_PATHに書く必要がある様です。
(多分Qiitaでどなたかが書かれた記事を見たがURLを失念。)

今回はGemfileに入れたいgemだったので、
Gemfileに記入して完了。

元記事を表示

三項演算子まとめた

# 三項演算子とは

if ~ else ~ を1つの文で書くときの演算子。
Rubyなどでコンパクトな表現に置き換えられる。
ternary operatorともいうので3つのものを1組にして動かすってイメージ。

“`
論理値(条件式) ? 何かをする(条件式a) : 別のことをする(条件式式b)
“`

論理値(条件式)を評価して結果が真なら 何かをする(条件式a), 偽なら 別のことをする(条件式式b)を評価してその結果を値とする。

# 少し細かく

“`
if 論理値(条件式)
何かをする(条件式a)
else
別のことをする(条件式式b)
end
“`

“`rb
if boolean?
var = foo
else
var = bar
end
“`

“`rb
var = boolean? ? foo : bar
“`

それとメソッドの戻り値として使うこともよくあるみたい。

“`rb
def foo
do_stuff
boolean? ? “bar” : “baz”
end
“`
Rubyでは暗黙

元記事を表示

【令和最新版】Array#sample と Random#rand ってどっちが速いんかな

## 背景
以前に `sample` と `rand` についてベンチマークを比較した[記事](https://qiita.com/kurashita/items/e1ef4604cb0a4f5e5a85)を書きましたが、いくつか見直すべき点があったため改めて投稿したいと思います。

## 検証
### `Kernel.#rand` より `Random.rand`

前記事では `Random.rand` と言いながら `Kernel.#rand`(つまり単に `rand`) を混同して使っていました。
なので改めて以下のように `Kernel.#rand` と `Random.rand` を比較してみます。

“`ruby
num = 10000
count = 1000000

Benchmark.bm 20 do |r|
r.report ‘Kernel.#rand’ do
count.times do
rand(num)
end
end

r.report ‘Random.rand’ do
count.times do

元記事を表示

Ruby on Rails Zeitwerkについて

## はじめに
通常のRubyでは、親要素を継承した子要素を定義する(依存関係のある)場合はファイルをrequireして、明示的に読み込む必要があります。しかし、Railsでは、親要素のファイルをrequireせずに継承しているものがあることに気づいたので、そのことについて調べてみました。

~~~ruby
#rubyでは、本来以下のような記述が必要だが、rails では不要。
#require ‘/application_controller.rb’
class UsersCotroller < ApplicationController ・・・ end ~~~ ## 結論 Rails 6.0以降は、Zeitwerkモードでの自動読み込み(オートロード)および再読み込みの仕組みにより、requireせずとも、ファイルが自動読み込みされている。 ## Zeitwerkとは Ruby用に作成されたコードローダーの仕組み プロジェクトで定義されたクラスやモジュールを必要な時(autoloding)もしくは、事前に一括で(eager loading)読み込みます。 #### フ

元記事を表示

devise ユーザー情報変更をcurrent_passwordなしで行う。

## はじめに

Deviseのデフォルトの状態だと、ユーザーのアカウントをアップデートするには、current_passwordが必要です。
ただ名前やメールアドレスといった基本情報の編集のたびにパスワードを入力させるのは、UIの面を考慮するとあまりよろしくないです。そこで、現在のパスワードを入力しなくてもプロフィールの情報を編集できるように実装します。また、パスワードを変更する場合は、現在のパスワードを入力するような仕様にします。
![スクリーンショット 2022-02-28 0.13.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653944/e7349a0b-db4c-19ba-3d73-97123bc62ca0.png)

## Devise::RegistrationsController#updateの実装について
Devise::RegistrationsController#updateでは、以下のとおり、Devise::RegistrationsController#upda

元記事を表示

mysql5.7での所有権エラーを直そう!!

# rails でmysqlを使ったらエラー出た。。

“`
Mysql2::Error::ConnectionError (Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)):
ERROR! The server quit without updating PID file (/usr/local/var/mysql/**.local.pid)
“`
# 環境
MySQL : 5.7.37
macOS : 10.14.6
ruby : 2.7.2
rails : 6.0.3

![mysql.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1385887/c415ecdf-9903-8e9e-7e07-4d1b44601273.png)

調べると、所有権に問題があるというので、ログインするため下のコマンドを試してみました。

## まずは、ログイン
“`console
mysql –

元記事を表示

画面遷移するとjQueryが動かないときはTurbolinksが悪さをしているかもしれない

**環境:**
Ruby 2.7.3
Rails 6.1.4.4
# **問題**
jQueryを使って、例えば「ボタンをクリックしたらモーダルウィンドウが表示される」といったアクションを実装したとする。すると、最初にページに訪れたときは正常に動くのに、ページ遷移を挟んだら動かなくなり、ページをリロードするとまた動き出す…といった不具合が発生する。

サンプルはこんな形↓(「open」というIDを持つオブジェクトをクリックすると、モーダルウィンドウが表示されるような処理)

“`jsx
$(function () {

$(“#open”).click(function(){
—–処理——
});

});
“`

# **原因**

**Turbolinksがjsの読み込みを邪魔している。**

まず、

“`jsx
$(function() {});
“`

1行目のこれはコードの省略形で、正確に書くと以下のようになる。

“`jsx
$(document).ready(function {

//処理

});
“`

元記事を表示

ARC136 D問題をRuby(NArray)で計算

[AtCoder Regular Contest 136 : D – Without Carry](https://atcoder.jp/contests/arc136/tasks/arc136_d)

私のレベルだと普段はこの辺の問題は解けないのですが、これに関してはうまくいった(比較的簡単な方法で解けた)のでメモしておきます。なお、[公式解説](https://atcoder.jp/contests/arc136/editorial/3465)のほうは難しくてまだ理解できていません。

## コード
Ruby で多次元配列を簡単・高速に扱うために、 Numo::NArray を使っています。

“`ruby
require ‘numo/narray’

L = 6
S = 10**L – 1 # == 999999

n = gets.to_i
a = gets.split.map!(&:to_i)

na = Numo::UInt32.zeros(*Array.new(L, 10)).inplace!
a.each { |ai| na[ai] += 1 }
na.ndim.t

元記事を表示

【個人開発】匿名とニックネームを自由に切り替えれる機能をwebサービスに追加してみた

# はじめに
1か月前にLisdomという投稿サービスをリリースしました。

ゆるーく自由なサービスと謳っていたのですが、昨日、ニックネームとかプロフィールが公開されていたら投稿したりコメントするのに億劫になると友人からの意見、、、
どうしようかな~と考えていたら、切り替え出来たら便利じゃん!と思い、忘れないうちに実装するため、早速実装してみました。

# 匿名とニックネーム表示の切り替え機能
今までは、以下のように、投稿主とコメント主のプロフィール画像とニックネームが公開されていました。
![qiita2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2503691/63cdce54-cacf-bea2-e74d-297ccbdc4333.png)

匿名希望さんのボタンをONにして投稿すると↓↓↓
![qiita9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2503691/519abcc1-bcec-2d61-

元記事を表示

Ruby OpenSSL::PKCS5.pbkdf2_hmac_sha1 をPHPで置き換えたときのメモ

“`ruby
def self.encrypt(data, pass, salt)
cipher = OpenSSL::Cipher::Cipher.new(“AES-256-CBC”)
key_iv = OpenSSL::PKCS5.pbkdf2_hmac_sha1(pass, salt, 1000, cipher.key_len+cipher.iv_len)
key = key_iv[0, cipher.key_len]
iv = key_iv[cipher.key_len, cipher.iv_len]
cipher.encrypt
cipher.key = key
cipher.iv = iv
encryptvalue = cipher.update(data) + cipher.final
return Base64.b64encode(encryptvalue)
end

def self.decrypt(data, pass, salt)
enctyptvalue = Base64.d

元記事を表示

【Rails】enumとransackを使って複数条件での検索を実装する

# 環境
Ruby 3.0.0
Rails 6.1.4.4
ransack 2.5.0
enum_help

# 何ができるようになるか

![スクリーンショット 2022-02-28 9.59.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1110285/c574573d-edb0-1d28-d8cd-5854327116ea.png)

上記の画像のようにタスクをタスク名とステータスからAND検索できるようになる。
また、ステータスはenumを使って表現できるようになる。

# 手順
## ①enumを導入する
ここでは、name(タスク名)を持つTaskモデルにstatus(タスクのステータス)カラムを追加します。
今回は、Taskモデルに`未着手`、`着手中`、`完了`の3つのステータスを持たせることにします。
その場合、statusにそのまま文字列で保存するやり方もあるのですが、それだと効率が悪いためActiveRecordの機能である`enum`を使用して、それぞれのstatusに

元記事を表示

【Ruby】 nからmの数の総和を求める

※初心者向け
※アウトプット練習の為

開発環境
rails 6.0.4.4
ruby 2.6.5

**概要**
与えられた数字n,mについて、nからmまでの数の総和を求めるプログラムを実装します。

# 問題内容
以下の要件を満たすsum_numberメソッドを実装しましょう。

第一仮引数をnとし、第二仮引数をmとすること
nからmまでの数を足し合わせていき、その総和を出力すること(例:n=1,m=5の場合、総和は1+2+3+4+5=15)

**雛形**
“`ruby
def sum_number(n, m)
#処理を記述
end

#呼び出し例
sum_number(5,15)

“`
**出力例**
sum_number(5,15) → 110 <計算内容5+6+7+8…+15>

# 解答
“`ruby
def sum_number(n, m)
total = 0 # 総和を代入する変数を、初期値0で定義しておく
while n <= m # n<=mの条件を満たす間、処理を繰り返す total = total + n # 変数tota

元記事を表示

Fiber#raiseによって外部から発されたエラーをFiber内でrescueしてみる

個人的なメモです。
趣味のrubyの非同期タスクスケジューラーの実装に必要になった。
自分で手を動かして挙動を見ておきたかっただけ。

## 公式ドキュメント

https://docs.ruby-lang.org/ja/latest/method/Fiber/i/raise.html

## 動作検証(エラーキャッチなし)

“`rb
f = Fiber.new do
Fiber.yield(:a)
Fiber.yield(:b)
Fiber.yield(:c)
Fiber.yield(:d)
end

> p f.resume
# => :a

> f.raise StandardError.new(“Fiber Interruption from #raise”)
# in `yield’: Fiber Interruption from #raise (StandardError)

> p f.resume
# attempt to resume a terminated fiber (FiberError)
“`

## 動作検証(エラーキャッチあり

元記事を表示

「rails6 論理削除 実装」と調べたあなたへ

## はじめに

今現在、私はとあるプログラミングスクールにて日々奮闘中の身でございます。 
きっといま、あなたは何かしらの開発の段階で論理削除という言葉を知り、実装方法を
模索していることかと思います。

かくいう私も、現在プログラミング学習の毎日で、なにかすばらしいスキルをや機能を
ご紹介できると言われるとまだまだです。ですのでこれは自分自身の備忘録も兼ねております。
よってまだまだ未熟のため間違っている点や不適切な表現があるかもしれませんがご容赦
いただきたいと共に、なにかご助言をいただければ幸いです。

とはいえ、あなたのお困りごとのなにか一助になれれば幸いと思いこの記事を
書くことにしました。

## 前提条件

・deviseを用いての何かしらの開発経験がある方
・論理削除の一例を知りたい方
・論理削除のためのgem( [`paranoia`](https://github.com/rubysherpas/paranoia)や[`discard`](https://github.com/jhawthorn/discard)など)を使用しない方法を知りたい方
(また、今回

元記事を表示

test qiita api v2

testdayo

元記事を表示

【Rails】nil? empty? blank? present? exists?メソッドについて【Ruby】

## はじめに
 本記事は、プログラミング初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## nil? empty? blank? present? exists?メソッドについて

### nil?
対象がnilの時は`true`をそうでなければ`false`を返します。
nilは「何も存在しない」状態です(nullと同じ)。

“`ruby:trueを返す例
sample = nil
p sample.nil?
# true
“`

“`ruby:falseを返す例
sample1 = “”
p sample1.nil?
# false

sample2 = 0
p sample2.nil?
# false

sample3 = []
p sample3.nil?
# false
“`

### empty?
empty?メソッドは対象が空の文字列や空の配列の場合に`true`を

元記事を表示

【rails】登録日の表示について

はじめに

今回はdeviseというgemを使った環境だったのでcreated_at(登録日)というカラムが最初から入っていました。
なのでそれを使います。

結論

“`rails:index.html.erb

登録日
<%= current_user.created_at.strftime('%Y/%m/%d') %>

“`
こちらのコードを表示させると

![スクリーンショット 2022-02-26 21.26.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340036/5d8deea6-d92f-adfb-8b29-5e36e878899e.png)

こうなります!

注意点

ログイン(新規登録)してからじゃないと、current_userがエラーを起こしますのでご注意を!

元記事を表示

OTHERカテゴリの最新記事