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

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

Webpacker::Manifest::MissingEntryError を解決したい

## Webpacker::Manifest::MissingEntryError
ただrails sコマンドを実行したところ、今までに見たことの無いエラーが突然吐かれて混乱。
“`ruby:エラー
ActionView::Template::Error (Webpacker can’t find application.js in /home/ec2-user/environment/Javajiten/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker’s config/webpack

元記事を表示

退会確認画面 退会ステータス

**はじめに**
bootstrap導入済 
namespases使用
devaice導入
:blossom:boolean型で実装
________
今回の完成イメージ
![スクリーンショット 2023-07-20 23.47.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492906/3e8e4249-9f2c-b6fb-ea23-3b15bba2e2f7.png)
### :cherry_blossom: boolean型について
真偽値を表現するためのデータ型です。これは、主に論理的な真(true)または偽(false)のいずれかの値を持つことができます。

データベースでの使用例としては、ユーザーが商品の購入を希望しているかどうか、商品が在庫切れかどうかなど、二つの状態のうちどちらかを示す必要がある場合に使用されます。

Railsでは、これをデータベースのカラムに適用して、そのカラムがtrueまたはfalseの値を持つことができます。例えば、今回のis_deletedフィールドは、顧

元記事を表示

既存のRailsアプリをRansack 4に対応させる手順

## はじめに
Ransack 4.0.0では「検索可能な列」や「検索可能な関連モデル」をモデル内に予め定義しておかないと、以下のようなエラーが発生します。

“`
RuntimeError in Users#index

Ransack needs User attributes explicitly allowlisted as
searchable. Define a `ransackable_attributes` class method in your `User`
model, watching out for items you DON’T want searchable (for
example, `encrypted_password`, `password_reset_token`, `owner` or
other sensitive information). You can use the following as a base:
“`

![ng.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

Sorbetのruntimeチェックを試してみた

SorbetはRubyのシンタックスで書かれているため、型アノテーションの情報を実行時にも保持できます。
(Steepはコメントアウトで型アノテーションを記述するため、実行時には型の情報が捨てられてしまっているようです)

これを用いて、実行時に型アノテーションの検査ができるというので、手元で試してみました。

https://sorbet.org/docs/runtime

## Sorbet Runtimeについて

Sorbetは部分的に型チェックを有効化、無効化することが可能です。そのため、型アノテーションを記述しても異なる型の値が渡される可能性があります。

Sorbet Runtimeは実行時に型情報を用いて、アノテーションをチェックすることができます。

これにより、型アノテーションの誤りに気づくことができます。

## 試してみる

まずは型チェックを無効化してプログラムを実行してみます。

“`rb:untyped.rb
# typed: false

class Untyped
attr_reader :age

def initialize(age:)

元記事を表示

顧客側 新規登録 

### はじめに
bootstrap導入済 
namespases使用
devaice導入
___________
今回の完成イメージです
![スクリーンショット 2023-07-20 19.57.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492906/230e22b6-61d8-9de0-77b4-00cc2a19a8aa.png)

“migrateファイル“
以下のようになってればOK!
足りないものがあれば追加してください。
“`diff_ruby
create_table “customers”, force: :cascade do |t|
t.string “email”, default: “”, null: false
t.string “encrypted_password”, default: “”, null: false
t.string “reset_password_token”
t.datetime “reset_pas

元記事を表示

プログラミング半年おにいさんが贈る、プログラミング初学者さんへ

今回はたくさんの人に支えられながらプログラミングを半年やってきた僕が、当時の自分を思い出しながら初学者さんへ向けて、モチベーションなどを少しでも上げてもらえればいいなと思い記事を書かせていただくことにしました!
 

果たしてどれだけの初学者さんがQiitaを読んでいるかは分かりませんが、少しでも多くの方に役に立っていただければと思います。
 

いくつか章があるので気になったところだけ読んでください。
 

ここで言う初学者とは、生まれたてのヒヨコに加えて、生まれようとしているヒヨコも含まれています。
 

もう成熟したヒヨコには今回のお話はあまり役に立たないかもしれないです。
 

そしてまた、僕がちょっと歩けるようになったヒヨコに過ぎなくても、それでも良いと言うのならこの先も読み進めてください。
 

完成した鶏さんがいる場合は、ぜひ僕に餌を与えてください。

## ここで簡単な自己紹介

* プログラミングをやりだして半年ほど経ちました。
* HTML, CSS, Ruby, Pythonをやっています。どれも好きです。
* 開発が大好きで、自分が欲しくなった機能などを作ったり

元記事を表示

オブジェクト指向エクササイズをRubyで書いてみる

## 導きの始まり

リーダー
「この新しいチームではオブジェクト指向的にコードを書いていきたい」


「…はい! (オブジェクト指向とか意識したことねぇぇ…(´・_・`) )」

## オブジェクト指向エクササイズ

[こちら](https://tech-blog.rakus.co.jp/entry/20210916/objectoriented)にすごくわかりやすい説明が載っていたのでまんま掲載します。

>オブジェクト指向エクササイズとは、書籍『ThoughtWorksアンソロジー』で紹介されているオブジェクト指向設計を理解し実際に使えるようになるためのエクササイズです。
>
>オブジェクト指向エクササイズの具体的な方法は、以下に定められた9つのルールを適用してコードを書く、というものになります。
>
>- 1つのメソッドにつきインデントは1段階までにすること
>- else句を使用しないこと
>- すべてのプリミティブ型と文字列型をラップすること
>- 1行につきドットは1つまでにすること
>- 名前を省略しないこと
>- すべてのエンティ

元記事を表示

顧客側 Topページ

### はじめに
・bootstrap導入済
・namespace使用
・device導入済

今回の完成イメージ
![スクリーンショット 2023-07-20 14.01.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492906/96407c88-13d4-f5ff-7e15-74a527db05ab.png)
テキストの背景に画像を指定して表示します。
新着商品を4件表示します。
_______

### コントローラー
“`public/homes_controller.rb
class Public::HomesController < ApplicationController def top @items = Item.order(created_at: :desc).limit(4) end end ``` @items インスタンス変数に、新着商品の情報を代入しています。具体的には、**Item.order(created_at: :desc).limit(4

元記事を表示

新卒エンジニアに捧げる! 新人でも貢献できるコードレビューの方法!

# はじめに

こんにちは。株式会社Relicのみけたです。
Railsのバックエンドエンジニアとして、弊社自社プロダクトの開発・保守に2年半携わっています。

おかげさまで弊社も規模が順調に拡大し、今年は新卒エンジニアがなんと11人も入社しました!
キャッチアップをしてもらい、互いに切磋琢磨をしながら会社を盛り上げていきたいと思っております。

https://www.wantedly.com/companies/relic/post_articles/503605

そこでその一助になればと、「**コードレビューで協力したいけれども、そもそもコード読むのむずいし、つまらないし、体質に合わない**」というあなたや、「**実装しなくちゃいけないから関係する周辺コードを読んだけれども何も分からないし、つらみがすごくて爆発しそう**」というあなたに向けて、**コードを読む上での方法論**をまとめてみました。(Railsを担当するサーバーサイド向け)

何かの参考になれば幸いです。

# 1. コードが読めない原因を特定しよう

目に前に繰り広がるアフリカの大自然のような大量のコードを眺めて

元記事を表示

【Ruby】7の倍数の数値の中に7が何回現れるかをカウントするロジック

Rubyを使ったロジックについて学習しています。
数字に関するお題について、回答し、ロジックを分解して考えていきます。

# 問題
7777777以下の7の倍数を全て取り出したとき、数字「7」は何回現れるか?

# 回答コード

“`ruby
def count_number(number)
list = []
for i in 1.upto(number) do
if (i % 7 == 0 )
list.append(i)
end
end
list.sum{|i| i.to_s.count(“7”)}
end

puts “#{count_number(7777777)}”
“`

# 出力結果
“`ter
777784
“`

# コードの解説

– このコードは、`1から指定した数値までの中で、7の倍数の数値の中に7が何回現れるかをカウント`するコードである。
– まず、`count_number(number)`っていう関数を定義している。引数には数値が渡されることを期待している。
– 次に、`list = []`で空の配

元記事を表示

管理者 商品詳細ページ

### :star2: 管理者の商品詳細ページの作成
bootstrap導入済 
namespases使用
_________
### :shamrock:コントローラー作成
アイテムを一つ取得して@item に格納
“`admin/items_controller.rb
ef show
@item = Item.find(params[:id])
end
“`

### :shamrock: views 詳細ページ作成
“`erb:abmin/items/show.html.erb

商品詳細

<%= image_tag url_for(@item.image), class: 'img-fluid', style: '

元記事を表示

【Ruby】combinationメソッドで重複のない組み合わせを作る

Rubyを使ったアルゴリズムについて学習しています。
今回はcombinationメソッドを使ったロジックの実装についてまとめました。

# やりたいこと
数字(n個)の配列から、重複のない2個の組み合わせを選択するロジックを作成する。

# 出力例

“`ruby
n = 6 とした場合の出力例

[
[1, 2], [1, 3], [1, 4], [1, 5], [1, 6],
[2, 3], [2, 4], [2, 5], [2, 6],
[3, 4], [3, 5], [3, 6],
[4, 5], [4, 6],
[5, 6]
]
“`

# combinationメソッドとは?
今回のロジックは、combinationメソッドを使うことで簡単に作れます。

> サイズ n の組み合わせをすべて生成し、それを引数としてブロックを実行します。

引用: Ruby 3.2 リファレンスマニュアル

h

元記事を表示

いいコード悪いコードまとめ6章 条件分岐

# 条件文のネストを早期リターンで避ける

# 条件分岐を一箇所にまとめる

例えば、以下のようにクラスが複数あって、その中で条件に応じて表示を切り替えているコードがある場合、
これでは、抜け漏れがかなり起きやすいようになっています。

なぜなら、条件分岐が重複して色々なところに書かれているからです。
“`
# 車のクラス
class Car
def initialize(type)
@type = type
end

def drive
case @type
when ‘sedan’
puts ‘乗用車を運転しています。’
when ‘truck’
puts ‘トラックを運転しています。’
when ‘suv’
puts ‘SUVを運転しています。’
else
puts ‘不明な車種です。’
end
end
end

# 自転車のクラス
class Bicycle
def initialize(type)
@type = type
end

d

元記事を表示

rails –taskしたら便利コマンドが大量にあったので忘備録

“`
rails –tasks
“`
知っているものが大半だが、中には初めて見るものもあるので、ぜひ使ってみたい。
“`
rails about # List versions of all Rails frameworks and the environment
rails action_mailbox:ingress:exim # Relay an inbound email from Exim to Action Mailbox (URL and INGRESS_PASSWORD required)
rails action_mailbox:ingress:postfix # Relay an inbound email from Postfix to Action Mailbox (URL and INGRESS_PASSWORD required)
rails action_mailbox:ingress:qmail # Relay an inbound email from

元記事を表示

いいコード悪いコードまとめ9章設計の健全性を損なうさまざまな悪魔たち

# デッドコードは消すこと
到達不能コードともいう

# YAGNI原則
You aren’t gonna need it.
必要になるまで先回りして実装する必要はない

# マジックナンバーは避けて、定数化しよう
定数化が難しい場面もありますが、基本的にマジックナンバーは避けましょう。

# グローバル変数は避けよう
グローバル変数は影響範囲が広すぎるので、必要に迫られるまで使用しないこと。

# nullを返さない、渡さない
rubyだとnilですが、`return nil`のはnilチェックしなければならなくなるので、良い書き方ではない。
ついやってしまいがちですが、`EMPTY`という変数を作り、それを返すようにした方がいいです。

# rescueの例外処理を忘れずに
rubyだと、begin, raise, rescue, ensureなどで例外処理していくわけだが、rescueを忘れるとただ例外を握りつぶすだけなので意味がない。

# 問題検出時にけたたましく叫ばせる
railseなどでエラーが発生した場合は、通知や記録、リカバリ処理、ログへの記録などを実装しよう。

#

元記事を表示

小数点以下の桁数を指定して四捨五入、切り上げ、切り捨て

Decimal(Big Decimal)のデータを取り扱うとprecisionとscaleの設定値が必要となる。
しかし、こいつの問題はデフォルトで四捨五入をしてしまい、切り捨てに対応していないこと!
面倒だが、before_saveでfloorメソッドを使うしかなかった。

そのときに関連のメソッドも気になったので調べて忘備録とする。

# 小数点以下N桁で四捨五入
## .round
roundメソッドは、引数に小数点以下の桁数を渡し、それより下の桁を四捨五入
“`
100.1111.round
# 出力結果 ==> 100

100.1111.round(1)
# 出力結果 ==> 100.1

100.3399.round(3)
# 出力結果 ==> 100.34
“`

# 小数点以下N桁で切り上げ
## .ceil
“`
100.1111.ceil
# 出力結果 ==> 101

100.3333.ceil(1)
# 出力結果 ==> 100.4

100.3383.ceil(3)
# 出力結果 ==> 100.339

100.3399.ceil(3)
# 出力結果

元記事を表示

erbで関数的にコードの再利用を行う

erbは他言語含め有名なテンプレートエンジンと比較すると特別な構文がとても少ない。

jinja系でいうところのmacro、pugとかでいうところのmixinの機能は最低限ほしいと感じることはないだろうか。

実は特別な構文など用意しなくてもerbではその辺の要件を簡単に満たせる

## macro, mixin的なものが不要な理由

jinja系だとHTML snippetの関数的な再利用方法としてmacroがある

こんな感じだ

“`jinja
{% macro foo(title, content) %}

{{ title }}
{{ content }}

{% endmacro %}

{{ foo(‘最寄駅について’, ‘大崎駅まで徒歩5分、大崎広小路駅まで徒歩6分です’) }}
“`

これをerbで書くとこんな感じで書ける

“`erb
<% foo = lambda do |title, content| %>

<

元記事を表示

deviseの導入

https://github.com/heartcombo/devise
公式サイトより、Getting startedを参考にしながらdeviseを導入してみました。

gemファイルに追記、bundle installを実行
“`
gem ‘devise’
“`
次に、以下のコードを実行
“`
rails generate devise:install
“`

以下のファイルが作成される
“`
create config/initializers/devise.rb
create config/locales/devise.en.yml
“`

ファイルを作成すると、ターミナルに以下のようなメッセージが表示される。
“`

===============================================================================

Some setup you must do manually if you haven’t yet:

1. Ensure you have defined default ur

元記事を表示

RubyでAtCoder ABC231(A, B, C)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC231のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

# A – Water Pressure
https://atcoder.jp/contests/abc231/tasks/abc231_a
“`ruby:a-231.rb
puts gets.to_i.fdiv(100)
“`

# B – Election
https://atcoder.jp/contests/abc231/tasks/abc231_b
“`ruby:b-231.rb
n = gets.to_i
hash = Array.new(n){ gets.chomp }.tally
puts hash.key(hash.values.max)
“`
## 解説
`tally`メソッドで同じkey同士をくくった後のvalueが最大となるkeyが答えとなります。(`max_by`を使った書き方もできると思います)

# C – Counting 2
https:/

元記事を表示

RubyでAtCoder ABC232(A, B, C)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC232のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

# A – QQ solver
https://atcoder.jp/contests/abc232/tasks/abc232_a
“`ruby:a-232.rb
puts gets.split(“x”).map(&:to_i).inject(:*)
“`

# B – Caesar Cipher
https://atcoder.jp/contests/abc232/tasks/abc232_b
“`ruby:b-232.rb
s = gets.chomp.chars
t = gets.chomp.chars

u = s.zip(t)
k = (t[0].ord – s[0].ord) % 26
puts u.all?{ (_1.ord + k) % 26 == _2.ord % 26 } ? “Yes” : “No”
“`
## 解説
`ord`メソッドと`all?`メ

元記事を表示

OTHERカテゴリの最新記事