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

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

管理者 商品詳細ページ

### :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?`メ

元記事を表示

現場で使えるRuby on Rails5速習実践ガイドを読んで感じたこと

Railsの学習に際し、インプット教材にRuby on Rails5速習ガイドを選び今回読み終えたので全体の感想をまとめていきます。

# 初の実践には持ってこいの辞書

一通り読み終えて感じたのは、これは参考書であると同時に辞書引きができるようになっているものであると感じました。

どうしてそう思ったのかは以下の点を感じたからです。

– 開発の全体像を掴むことができる
– アプリケーションの作成から機能追加や削除を一通り学べる
– Rspecでのテスト技法が記載されている
– 概念への理解
– JSへの理解度の追求
– チーム開発の流れ
– バージョンアップへの対応の姿勢

Railsアプリケーションを作るのは簡単ではありませんし、今後ECサイトをHCの課題で制作していくわけですが、根本的な部分の理解度がないとそもそもアプリケーションを作れないでしょう。

どういう手段を用いて開発へ取り組むべきなのか、

またどういったステップで次へ行っているのかを明確にする時、

本書は開発経験がヒヨコな私のような駆け出しには必要な書籍であると感じました。

わからない

元記事を表示

SQLite3::BusyException: database is locked を解決した方法

# 背景
railsチュートリアルをやってる途中で `rails s` でサーバーを起動し、seedファイルの最初のユーザーでログインしようとしたら以下のエラーが発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515182/e48be9fd-8722-9dfc-dd92-39b69d6e4a87.png)

# 原因
`rails s` でサーバーを起動する前に `rails c –sandbox` でコンソールを開き、
“`
> user = User.first
“`
と、最初のユーザーに対する操作を行っていたためでした。
sandboxオプションをつけると、操作したレコードにロックがかかってしまうみたいです。
今回はsandboxオプションをつけて開いた、コンソールを閉じずに、サーバーを起動させたため、
最初のユーザーのレコードにロックがかかり、ログイン時にレコードの操作ができなかったのだと思われます。

# 解決方法
`exit`または`quit`でrail

元記事を表示

【Ruby】 ハッシュ、シンボルの基礎

# 概要
– ハッシュ、シンボルについて復習をしたので、自分の中で整理しておくことにした
– 学習したことの備忘録

# 主な内容
– ハッシュ
– シンボル
– keysメソッド、valuesメソッド
– ハッシュのキーワード引数

# ハッシュ
##### {}は、Hashクラスのオブジェクト
“`ruby
a = {}
puts a.class => Hash
“`

まずは基礎の基礎

##### ハッシュの要素を追加する場合
“`rb:要素の追加
# ハッシュ[キー] = バリュー

colors = { “apple” => “red”, “orange” => “orange”, “melon” => “green” }
colors[“remon”] = “yellow”

puts colors => {“apple”=>”red”, “orange”=>”orange”, “melon”=>”green”, “remon”=>”yellow”}
“`

##### バリューを取り出したい場合
“`rb:バリューの取り出し
# ハッシュ[キー]

color

元記事を表示

【プログラミング勉強】完全無料のプログラミング習得ロードマップ【JavaScript】

私は大学3年生(2023年時点)で[Matcher株式会社](https://matcher.jp)のエンジニアインターンをさせて頂いております。

この記事では、**完全独学・費用を一切かけずにエンジニアになりたい**という方向けに書きました。「**プログラミングってよく聞くけど、何から始めればいいの?**」という気持ちを少しでも解決する手立てになれればと思っております。

# どのプログラミング言語を学ぶのが最適か
プログラミング言語を選定することが一番難しく感じる方も多いと思います。Python, JavaScript, Ruby, C++…挙げていけばマイナーな言語も含めてキリがないと思います。ではどの言語を勉強すればいいのか…

完全に私の主観ですが、結論**どれでもいい**です。理由は、一つでも言語をマスターすることができれば、他の言語でもほとんど融通が効くことが多いからです。大事なことは一つの言語を完璧に身につけることが大切だと思います。

どれでもいいと申したのですが、記事を書く上で一つの言語に絞ってロードマップ的なことを書いていきたいので、今回は**JavaScrip

元記事を表示

20%ルールは何分に該当するのか計算してみた

## 環境
Ubuntu 20.4
Ruby 2.6

## はじめに
Googleに20%ルールというものがあります。業務時間の20%を自分の好きなことに充ててもいいというものです。Googleのような大手が、こうしたエッジの効いたルールを導入して成果を上げているとのことで、日本でもわりと話題になりました。そして、Web業界の中にも、同じようなルールを導入し出している会社がちらほらとあるようです。

自分が所属する組織はSIerですが、社内にこのようなルールはありません。しかし、個人的に何%でも、わりと自由に設定できる、暗黙のカルチャーのようなもはあったりします。

自分の組織に20%ルールがあった場合、業務時間の何分を割り当てることになるのだろうか、気になったため、計算するプログラムを作ってみました。

## コード
“`rule.rb
def calc_time(rule)

require ‘time’

str_tm = Time.parse(“09:00”) # 業務開始時間
end_tm = Time.parse(“17:30”) #

元記事を表示

【Ruby】バブルソートで配列の並べ替え

Rubyを使ったアルゴリズムについて学習しています。
今回は数字の配列を並べ替える方法についてやっていきます。

# やりたいこと
sortメソッドを利用せず、数字の配列を昇順ソートして出力するアルゴリズムを作成する。

“`ruby
array = [6, 7, 3, 2, 5, 4, 1]
“`
これを、こうしたい。
“`ruby
array = [1, 2, 3, 4, 5, 6, 7]
“`

# バブルソートとは?

> 値を昇順・降順で並べ替えるアルゴリズムのひとつ
> pointデータを小さい順(大きい順)に並べ替えるよ
> point隣り合う要素の大小比較を繰り返すことで、全体を並べ替えるよ

引用:バブルソートとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

# まずは数字の並べ替えるプログラムを作る

“`ruby
# 配列を定義
array = [6, 7, 3, 2, 5, 4, 1]
if array[2] > ar

元記事を表示

【Ruby】繰り返し処理の制御構造 (で遊んでみた)

# はじめに
– 繰り返し処理の動作を変更するための制御構造について、遊びながら学んでみた
– 学習したことの備忘録

# 主な内容
– break
– redo
– catchとthrow

# break(ひたすらラーメンを完食していくコード)
`break`:繰り返し処理を脱出できる
“`rb
ramens = [“豚骨ラーメン”, “醤油ラーメン”, “塩ラーメン”]
tastes = [“スープを飲む”, “麺をすする”, “完食!”]
ramens.each do |ramen|
tastes.shuffle.each do |t|
puts “#{ramen}, #{t}”
break if t == “完食!”
end
end
“`
shuffleで、「スープを飲む」, 「麺をすする」, 「完食!」がランダムに入れ替わり、「完食!」でbreakする。それを、「豚骨ラーメン」,「醤油ラーメン」,「塩ラーメン」のそれぞれについて繰り返す。

“`:実行結果例
とんこつラーメン, スープを飲む
とんこつラーメン, 麺をすする
とんこつラーメン,

元記事を表示

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

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

# A – Order Something Else
https://atcoder.jp/contests/abc310/tasks/abc310_a
“`ruby:a-293.rb
n, a, b = gets.split.map(&:to_i)
d = gets.split.map(&:to_i).sort

discounted_price = d[0] + b
puts a <= discounted_price ? a : discounted_price ``` # B - Strictly Superior https://atcoder.jp/contests/abc310/tasks/abc310_b ```ruby:b-293.rb n, _ = gets.split.map(&:to_i) array = Array.new(n){ gets.split

元記事を表示

Boolean型カラムをpresence: trueで設定したらfalseで保存出来なかった

# 前提条件

Userテーブルにnullを許容しないBoolean型のhoge_flagというカラムがあるとする。

“`ruby
create_table :users do |t|
t.boolean :hoge_flag, default: true, null: false
end
“`

migration後にuser.rbにvalidatesを追加

“` ruby
validates :hoge_flag, presence: true
“`

# データ保存時にエラーが出る・・・

上記を踏まえて、hoge_flagをfalseにしてみた!

“`
user = User.first
user.hoge_flag = false
user.save!
“`

結果
“`
Translation missing: ja.activerecord.errors.messages.record_invalid (ActiveRecord::RecordInvalid)
“`

あらら・・・

もう少し確認してみると

“`
user.valid?
=>

元記事を表示

Railsで’application.css’以外のCSSファイルを作成する手順

## はじめに
#### 実装したこと
レスポンシブ対応のために新しいCSSファイルを作成と適用する手順を記事にします。

#### 動作環境
Ruby 3.1.2
Rails 6.1.7.3

## 手順
1\. まず app/assets/stylesheetsディレクトリ内に、’responsive.css’という名前の新しいCSSファイルを作成します。(ファイル名はなんでも問題ないです)

2\. responsive.cssファイルを開き、メディアクエリなどのレスポンシブデザインに必要なスタイルルールを記述します。例えば、以下のようなコードを追加します。
~~~ responsive.css
/* 例: スマートフォンサイズの場合に適用されるスタイル */
@media screen and (max-width: 520px) {
/* スタイルの定義 */
}

/* 例: タブレットサイズの場合に適用されるスタイル */
@media screen and (min-width: 521px) and (max-width: 960px) {
/* スタイルの定

元記事を表示

OTHERカテゴリの最新記事