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

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

本日の基礎練習問題(22/3/16)

**問題**
以下の条件を達成するプログラムを実装しなさい
銀行口座に10万円の預金残高があり、お金を引き出すプログラムを作成します。
・お金を引き出すwithdrawメソッドを作成する
・お金を引き出すと手数料110円かかり、「◯◯円引き落としました。残高は◯◯円です」と表示する(残高は手数料を引いた額を表示します)
・引き落とし金額と手数料の合算が、預金残高より大きい場合は「残高不足です」と表示する
・以下にヒントを用意するので参考にしてください
“`
def withdraw(balance, amount)
fee = 110  # 手数料
# 引き落とし額と残高を表示する、もしくは残高より多く引き落としたら残高不足と表示
end

balance = 100000  # 残高
puts “いくら引き落としますか?(手数料110円かかります)”
amount = gets.to_i
withdraw(balance, amount)
“`

# 私の回答
“`
def withdraw(balance, amount)
fee = 110
after_bala

元記事を表示

warning ../../package.json: No license field の解決法

# はじめに
Railsチュートリアルを学習中、
rails s を実行すると
“`
warning ../../package.json: No license field
“`
このエラーがずっと表示されていました。(ローカルでのサーバーは起動する)

気になったので、解決法を調べました!

# バージョン
Ruby 2.6.3
Rails 6.0.4

# 結論
まず結論から書きます!
“`
rm -rf yarn.lock
“`

を実行するとエラーが解消されました!

今回はyarn installが適切に行われていないために表れたエラーでした。
yarn.lockのコンフリクトを解消することでエラーが解消されました。

# 解決までに試したこと
warning ../package.json: No license fieldでは
ライセンスが設定されていないということなので、
ググってみると、主に下記の解決法がヒット!

– package.jsonに適切なlicenseをセットする。
– package.jsonに”license”: “UNLICE

元記事を表示

ridk のことをよく知ろう

# はじめに
Windows版rubyinstallerの話ですが、`ridk`ってご存知ですか。
私は知りませんでした。
# 実はいつも見ていた
![20220315a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/fed90a89-71d1-f96f-f355-c954a7f6ceb1.png)
rubyinstallerの終わりの方に出てくるコマンドプロンプト画面。
実はこれ、`ridk`だったんです。

次のバージョンをインストールするまでお目にかかることもないと思っていましたが、次のコマンドで呼び出すことができます。

“`
C:\Users\user>ridk install
“`
# 実はアップデートもできる
https://qiita.com/superrino130/items/b9a7bedd9737932ddfc9

2年前は`msys2`で`pacman`を使用していましたので、頻繁にアップデートしておりましたが、~~rubyinstallerを使用してからはア

元記事を表示

グループ登録機能を追加してみた:改

前回deviseを使ってgroup機能の登録を試みたが、中間テーブルに保存されないという現象が起きてしまった。
3時間考えた末、いい解決方法が見つからなかったので、思い切って1から作り直すことに。

### 今回試みた事
* group機能の実装はdeviseではなく、“rails g model group“を使用する
* カラムにはパスワードを設定する

### 手順
まずはモデルの作成

“`:ターミナル
rails g model group
“`

次に必要なカラムを記述。
“`ruby:db/migrate/xxxxx_create_group.rb
class CreateGroups < ActiveRecord::Migration[6.0] def change create_table :groups do |t| # 以下の3行を追記 t.string :group_name, null: false, default: "" t.string :password_digest, null: false, def

元記事を表示

Ruby、PHP、Python、JavaScriptの特徴とコードを比較してみた(言語選定と言語チェンジのための参考資料)

# この記事の概要
代表的なプログラミング言語“`Ruby、PHP、Python“`といったWeb開発などで使われる
人気のバックエンドの言語をそれぞれ比較した記事です。

後フロントエンド言語の“`JavaScript“`も比較していきます。

初学者でどの言語をやればいいのかわからない時、
言語を変える時の参考になると幸いです。

# Webの仕組み
クライアントとサーバーの関係とリクエストとレスポンスの関係がわかれば
今回は大丈夫です。

https://qiita.com/Hashimoto-Noriaki/items/c5c9eb26565b01150556

***サーバー側で処理をするのがRuby、PHP、Python***で
***クライアントのようなブラウザを操作するのがJavaScript***です。

## Ruby
Rubyは初学者向きのプログラミング言語で、
プログラミングスクールでよく使われる言語です。
***Webアプリケーションの開発で使用されるサーバーサイド言語***です。

フレームワークの代表的なのが***Rubyon rails***で

元記事を表示

メタプログラミングRuby クラス定義について

## クラス定義
クラスにはメソッド以外にもあらゆるコードを記述できます。
“`
class Example
puts ‘Hoge!’
end #=>Hoge!

result = class Example
self
end

result #=> Example
“`
クラス定義の中では、クラスがカレントオブジェクトになるんです。つまりselfになるんです。

### クラスインスタンス変数
クラス定義の中で定義されたインスタンス変数のことをクラスインスタンス変数といいます。
実際にコードを見ていきましょう
“`
class Example
@var = 1
def self.read; @var; end
def write; @var = 2; end
def read; @var; end
end

obj = Example.new
obj.read #=> nil
obj.write #=> 2
obj.read #=> 2
Example.read #=> 1
“`
1つ目の“`@var“`は“`obj“`がselfになるんです。

元記事を表示

初めてRubyのgemを読んでみる

# はじめに
難易度が比較的低く、初めてにおすすめのsettingslogicを読んでみることにしました。

# settingslogicとは
簡単にいうと異なる値を環境ごとに持たせることができるようになるgemです。
https://github.com/settingslogic/settingslogic

# 動きの確認

まずは、applicationに以下のクラスを定義します。
Settinglogicを継承したSettingsクラスです。
ここでは、sourceとnamespaceの定義をしています。

“`ruby
class Settings < Settingslogic source "#{Rails.root}/config/application.yml" namespace Rails.env end ``` Settingsクラスでsourceを指定していることにより、以下のファイルから値を読み込んでくれます。 ```ruby # config/application.yml defaults: &defaults cool:

元記事を表示

【初心者用】Rubyでじゃんけんゲームを作ってみた

# 1.やりたいこと
– Rubyでじゃんけんゲームを作りたい。
– [「プロを目指す人のためのRuby入門」](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976)で、クラスの概念を学習したばかりなので、クラスを使い

元記事を表示

[初学者/At_Corder] A.Range Productを解いてみた

# [初学者/At_Corder] A.Range Productを解いてみた
## 目次
– 概要
– 開発環境
– 解答と説明
– まとめ

## 概要
A.Range Productの問題です。

## 開発環境
– Ruby 2.6.3
– Visual Studio Code
– Ubuntu 20.04.3

## 解答と説明
問題文は下記のサイトにて、ご覧いただけます。

https://atcoder.jp/contests/agc002/tasks/agc002_a

##### 解答
“`ruby:range_product.rb
a,b = gets.split.map(&:to_i)

if a <= 0 && 0 <= b puts "Zero" elsif b < 0 num = b-a+1 if num.even? puts "Positive" else puts "Negative" end else puts "Positive" end ``` ##### 説明 **<流れ>** ※問題文のまま、連続数の

元記事を表示

【Ruby】class Rational 有理数を扱うクラスについて

“`ruby
val = 1 + 1/2r
puts val.class
“`

### 返ってくる値
“`
Rational
“`

Rationalは**有理数**という意味。

そもそも有理数とは、有理数とは、a/b(a、bは整数)のように分数の形に表せる数のことを言うらしい。

例えば、整数の3も3/1と表現することができるため、これも有理数を言うことができる。

val = 1 + 1/2r
この場合は、1 + 1/2 の演算となる。
すると答えは、3/2になる。

そのため、これは有理数となり、Rational(有理数)が返ってくる。

元記事を表示

ifとeach_with_indexで条件に応じたViewを表示させる

ブログサイトで、

1)広告があれば大見出しに広告を入れて、その下にブログ記事を配置

2)広告がなければ大見出しにブログ記事の1つめを配置

といった具合に、場合によってデザインを分けたい。

![完成形のイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2496677/f585810d-7e3c-1605-4c19-ffc9993bc9b2.png)

完成形のイメージ

DBは説明のため簡略化して考える

![記事テーブルと広告テーブルのみ考える](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2496677/39977f21-d68e-703a-6b5c-3ccaf3bfa441.png)

記事テーブルと広告テーブルのみ考える

### コントローラー

HomeController

“`ruby
def index
@articles = Article.all
@affiliate = Affiliate.w

元記事を表示

本日の基礎練習問題(22/3/15)

**問題**
正の整数を入力します。その整数が、
10の倍数(10,20,30…)からの差が2以内であるときはTrue
それ以外はFalse
と出力するメソッドを作りましょう。

出力例:
near_ten(12)→True
near_ten(17)→False
near_ten(19)→True

# 私の回答
“`
def near_ten(num)
quotient = num % 10
if quotient <= 2 || quotient >= 8
puts “True”
else
puts “False”
end
end
“`
# 解説
まずは引数に(num)を設定する
次に1の位を考える。10の倍数から差が2以内なので1の位が0,1,2,8,9が当てはまる。
quotientに1の位を代入する。
そしてif文で2以内または8以上と条件分岐を作成する。
当てはまる場合はTrue、当てはまらない場合はFalse

# 模範回答
“`
def near_ten(num)
quotient = num % 10
if quoti

元記事を表示

Ruby で 数独 の5

# はじめに
https://qiita.com/superrino130/items/a92bb2cf33b23046558a

前回の記事は、下記の入力で、次の出力になったところまででした。

“`ruby
# input
0 0 0 0 0 0 0 0 0
0 0 0 0 0 3 0 8 5
0 0 1 0 2 0 0 0 0
0 0 0 5 0 7 0 0 0
0 0 4 0 0 0 1 0 0
0 9 0 0 0 0 0 0 0
5 0 0 0 0 0 0 7 3
0 0 2 0 1 0 0 0 0
0 0 0 0 4 0 0 0 9

# output
Numo::UInt32#shape=[9,9]
[[0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 1, 0, 3, 0, 8, 5],
[0, 0, 1, 0, 2, 0, 0, 0, 0],
[1, 0, 0, 5, 0, 7, 0, 0, 0],
[0, 0, 4, 0, 0, 0, 1, 0, 0],
[0, 9, 0, 4, 0, 1, 0, 0, 0],
[5, 1,

元記事を表示

【Rails】主キー以外でテーブル間を関連付ける

## 前提条件
以下のような関係性を想定します。
`staff(職員)`の中には、`manager(マネージャー)`の権限を持っている者がいて、
`manager`は`assessment(評価)`することができる。
今回は赤枠`(manager-assessments)`に焦点を絞る。
(「初めからmanager_idを主キーにすればいいじゃん」
というツッコミは今回スルーさせていただきます。m(_ _)m )
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2508607/630bb79e-6121-3c9f-d44d-237cb8943e74.png)

## やりたいこと
`primary_key`を意図的に変更したい。
(関連づけの際に主キー`(primary_key)`を選択しない場合、(Rails が空気を読んで)
`manager_id`が`primary_key`になる。)

## 方法
以下をモデルに追記すればOK
“`Manager.rb
has_many :

元記事を表示

rails db:migrateしたのにDBに反映されなかった時の話②

# はじめに
1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
rails db:migrateコマンドを実行した際にDBに反映されなかったことについて書きます。
今回は解決編ということで、昨日の続きです。
※Ruby2.6.5の環境を使用し学習しています。

# おさらい
rails db:migrateを実行すると下記のようにエラーになりました。
焦ってエラー元のusersテーブルを作り直してしまったため、ゴミファイル(NO FILE)ができてしまい、昨日はそれを削除した手順について書きました。
“`:ターミナル
% rails db:migrate
== 20220310073337 CreateDietrecords: migrating ================================
— create_table(:dietrecords)
-> 0.0140s
== 20220310073337 CreateDietrecords: migrated

元記事を表示

Rubyで文字列のタイム表示を昇順に並び替える

## やりたいこと
文字列のタイム表示を昇順で並び替える。

条件

– 文字列の形式は`00:00.00` (分 : 秒 . 小数点以下2ケタ)
– 想定のタイム範囲は`05:00.00`から`10:59.99`
– 件数はおよそ250件

## 環境
– Ruby 3.1.0p0
– macOS 10.15.7

## 文字列のサンプルをつくる
`Integer#times`、`Kernel.#rand`、`Time#local`、`Time#strftime`を使って250件のサンプルをつくった。

“`ruby
array = []
250.times { array << rand(Time.local(2022,3,14,1,5,0,0,0)..Time.local(2022,3,14,1,10,59,999) ) } #Timeオブジェクトを`Time#strftime`を使って文字列に成形する samples = array.map{|t| t.strftime("%M:%S.%2N")} #=> [“10:11.12”, “05:30.87”, “09:59.53

元記事を表示

【初心者用】Rubyでバブルソート問題をやってみた

# 1.バブルソートとは?
– 大小バラバラに並んでいるデータを昇順(小さい順)、降順(大きい順)に並べる方法のひとつ。
– 具体的には、隣り合う要素の大小比較を繰り返して、並び替えを行う。

# 2.やりたいこと
– 次のような結果を得たい。
– 実は、sortメソットを使用すると、一発でソートすることも可能だが、今回は、これを使用せずに記述していきたい。
“`Ruby:
# ソート前
numbers = [10, 8, 3, 5, 2, 4, 11, 18, 20, 33]
# ソート後
numbers = [2, 3, 4, 5, 8, 10, 11, 18, 20, 33]
“`

# 3.やったこと
– メインの処理はこのように記載してみた。
“`Ruby:buble_sort.rb
# bubble_sortメソッドの作成
def bubble_sort(numbers)
# 要素数の回数分繰り返す
numbers.size.times do |i|
# 1つの要素に対して、次の要素と大小比較を繰り返す
# 例えば、numbers[0]

元記事を表示

【Railsチュートリアル】1章のHerokuデプロイでArgumentError

# 要約
HerokuでサポートされているRubyのバージョンと手元のバージョンを揃えたら解消した。

# 概要
Railsチュートリアル第4版の「1.5.2 Herokuにデプロイする (1)」でエラーが発生し、デプロイできなかった。

# 環境
チュートリアル通りの手順で環境構築。
* OS:Ubuntu18.04 (AWSのCloud9を利用)
“`bash
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION=”Ubuntu 18.04.6 LTS”
“`
* Rails:5.1.6
* Ruby:2.6.3
* Gemfile:以下の通り
“`rb:Gemfile
source ‘https://rubygems.org’

gem ‘rails’, ‘5.1.6’
gem ‘puma’, ‘3.9.1’
gem ‘sass-rails’, ‘5.0.6’
gem ‘uglifier’, ‘3.2.0’
gem ‘c

元記事を表示

【Ruby】const_missingメソッドについて

“`ruby
class Object
X = “X”
def self.const_missing a
p “#{a}”
end
end
Y

> “Y”
“`

## const.missing
const_missingは、未定義の定数を参照した場合に呼び出される。
この場合は、Yは定数として定義していないため、const_missingが呼び出され実行される。

元記事を表示

cancancanでモデル名に紐づかない制御をする方法

# はじめに

権限制御のgemとして、[cancancan](https://github.com/CanCanCommunity/cancancan)があると思います。
基本的な使い方はいろいろなところで記事になっていますが、「コントローラ名通りのモデルがないとき」の権限制御方法について記載します。

# 例

コントローラで次のように記載

“`rb
class ProfilesController
authorize_resource class: :profile # ここではコントローラ名と同じprofileにしていますが、コントローラと名前を揃える必要もないです

def new

end

def edit

end

end
“`

シンボルの形で描くことで、モデルがなくても権限管理することができます。
あとは通常の使い方と同じで、abilityクラスで定義していきます。

“`rb
class Ability
include CanCan::Ability

def initialize(user

元記事を表示

OTHERカテゴリの最新記事