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

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

rails db:reset コマンドの挙動について

# はじめに
1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
rails db:resetコマンドを実行した際に疑問に思った事があったのでメモを残します。
※Ruby2.6.5の環境を使用し学習しています。

# 経緯
以前書いた`rails db:migrateを実行した時に出たエラーを解決した話`で書いていなかったのですが、
`rails db:reset`を実行後、再度`rails db:migrate`を実行してしまい、何も出力されずプロンプトが返ってきました。
そこで`rails db:reset`が気になり調べてみました。

# 調べた結果
結論としては下記のような動きをしているようです。
[4.3 データベースをリセットする](https://railsguides.jp/active_record_migrations.html#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E3%83%AA%E3%82%BB

元記事を表示

herokuにあげた後にエラー発生

## エラー画面
[![Image from Gyazo](https://i.gyazo.com/2cf8bd6b44cb884d27f2982b66d5a8b9.png)](https://gyazo.com/2cf8bd6b44cb884d27f2982b66d5a8b9)

– ログを見るように言われているのターミナルで下記を実行
“`
heroku logs –tail –app <<アプリケーション名>>
“`

– ログで下記のエラーを発見
“`
ActiveRecord::StatementInvalid: Mysql2::Error: Table ‘resolutions’ already exists
“`
– resolutionsテーブルは既に存在しているというエラー
– herokuにアップ後デーブルを一度作成し直したのが原因と思われる
– `heroku run rails db:migrate:status`で確認してみます。
[![Image from Gyazo](https://i.gyazo.com/e0eaeab60ab9b8b014

元記事を表示

【Ruby on Rails】Skipprでスライドショー【Rails6】

地球の皆さんこんにちは。
今回はこの私が何故かできなかった、Skipprとやらを使ってスライドショーの実装を始めていきましょう。
ですが、残念ながら、あなた方にはここで死んでもらいます。
喰らいなさい!!パンチ!!!

何!?効いていない!?まさか!貴様!

なるほど。そういうことですか。

それでは、やっていきましょう。

# Skipprプラグイン

プラグイン!!〇ックマンEXEトランスミッション!!!
よし!まずはSkipprをインストールするよ!熱斗くん!!

[Skipprサイト](http://austenpayan.github.io/skippr/)

まずは、上記サイトに遷移。そしてGithubのリンクをクリックです。Gitのリポジトリに移動するはずです。

移動したら、「Clone or download」をクリックそして「Download ZIP」をクリックしましょう。zipファイルがダウンロードされるはずです。

ダウンロードしたZIPファイルを解凍しましょう。***炎の呼吸 奥義 玖ノ型 煉獄!!***
あ、できない方は普通に解凍しましょう。

解凍された

元記事を表示

【Ruby】指定日付内のランダムな日時を取得する

## 結論

rand関数で取得できます。
クラスに関係なく使えて便利。

“`ruby
# DateTime(時間は0時0分で固定の様子)
> datetime_from = DateTime.parse(‘2022-01-01 00:00:00’)
> datetime_to = DateTime.parse(‘2022-12-31 00:00:00’)
> rand(datetime_from..datetime_to)
=> Sat, 30 Apr 2022 00:00:00 +0000

# Time(ミリ秒まで細かくランダムにしてくれる)
> time_from = Time.parse(‘2022-01-01 00:00:00’)
> time_to = Time.parse(‘2022-12-31 00:00:00’)
> rand(time_from..time_to)
=> 2022-12-05 14:34:05 113996677/134217728 +0000

# ActiveSupport::TimeZone(秒まで)
> timezone_fro

元記事を表示

【Rails】ラジオボタンのラベルにクリック判定をつける

## はじめに
:::note warn
Rails学習のアウトプット記事です。実装の際は参考サイトも併せてご確認ください。
:::

 Ruby on Railsの学習中にて、フォームヘルパー機能を使ってラジオボタンとラベル(キャプション)を実装する際、ラベルとボタンが紐づいておらず、ラベルをクリックしても反応しなかった。
 HTMLだとlabelタグでボタン自体を囲ってしまう方法があるそうだが、フォームヘルパーでラベルを生成する場合はfor属性を使ってボタンを指定する必要がある為、その記述方法を書いていく。
## 開発環境
– Rails 5.2.6
– Ruby 2.6.3
###
## 実装
### 前提条件
– **form_with**を使用
– 記事内で使用されているモデル・値は以下の通り

項目|値
-|-
モデル名|Test
カラム名|status
カラム型|Boolean
### 生成されるHTML(ラジオボタン部分のみ)
“`html
【初心者用】RubyでCSVファイルを出力してみた

# 1.やりたいこと
– Amazonの商品URLから`商品ID`と`商品名`を抽出
– `商品名`を抽出したうえで、エンコーディングを文字列に変換
– CSVファイルで書き出し

# 2.やったこと
– AmazonのURLの構造は次のようになっている。
– そのうち、`商品名`と`商品ID`を取り出して、加工し、CSV出力したい。
“`Ruby:URLの構造
https://www.amazon.co.jp/商品名(エンコード)/dp/商品ID
“`
– 標準ライブラリの`uri`と`csv`を使用する
“`Ruby:output_csv.rb
require ‘uri’
require ‘csv’

url_array = [
‘https://www.amazon.co.jp/%E3%82%B0%E3%83%AC%E3%83%B4%E3%82%A3%E3%82%AA-%E3%83%AA%E3%83%A5%E3%83%83%E3%82%AF-%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%83%AA%E3%83%A5%E3%83%83%E

元記事を表示

【初心者】ルートのルーティング設定

# 目的
Railsチュートリアル学習の備忘録として

## ルート(root)
Railsアプリを作成し、起動した後「http://localhost:3000/」
などのローカルホストにアクセスすると呼び出される

## ルーティング(route/routing)
URLとアクションを結び付けること

# ルートのルーティング設定とは
簡単に言うと、一番最初に表示されるページ(ルート)を指定(ルーティング設定)しちゃおうということです!

# 設定方法
設定方法は簡単で
「config/routes.rb」のファイルを編集し、ルートに結び付けたいアクションを以下のように設定するだけです!
“`ruby:config/routes.rb
root ‘コントローラー名#アクション名’
“`

たとえば
「applicationコントローラー」の
「helloアクション」をルートに結び付けたい場合は、、
“`ruby:config/routes.rb
root ‘application#hello’
“`
こう設定すると、
「http://localhost:3000/」
にアク

元記事を表示

Rubyで複数の配列を比較して重複の値を取り出したり、排除したりする方法

## 概要
今回は`Ruby`で**複数の配列**を比較して重複する値を取り除いたり、重複する値のみを抽出したりする方法を調べたのでメモとして残しておきます。

## やり方
### 重複した値を抽出

“`ruby
a = [1, 2, 3, 4]
b = [3, 4, 5, 6]

a & b
# => [3, 4]
“`

### 重複した値を取り除く

“`ruby
a = [1, 2, 3, 4]
b = [3, 4, 5, 6]

a – b
# => [1, 2, 5, 6]
“`

元記事を表示

【Ruby】配列の中の配列とか、ハッシュの中のハッシュとか、モヤモヤするのでモデル化したら「シン・オブジェクト」が第4形態に進化した!【オブジェクトマッパー編】

# はじめに

Rubyでコードを書いてる時、配列の中の配列とか、ハッシュの中のハッシュとか、そういったデータ構造を取り扱うことってありませんか?
手軽にサクっと作れて、データ構造を表現するのに便利ですよね?でも、私はそういったデータ構造を取り扱う時ちょっとモヤモヤします。

ハッシュや配列などのデータ構造を直接取り扱っていると、カッコやクォートなどの記号があふれていて、そういったちょっとした記号の理解がチリ積もとなって、脳内のワーキングメモリを持っていかれてしまいます。

だから、そういったむき出しのデータ構造を直接取り扱うのではなく、コードの関心事をわかりやすくするために、モデル化を行いたくなるのです。

この記事では、Gemなどを使うのではなく、実際にコードを書いてモデル化していきたいと思います。いきなり最終的なコードを提示するのではなく、モデル化にいたる過程を段階的に説明していくことで、オブジェクト指向っぽくするために、どのような考えで進めているのか、サンプルを提示したいと思います。

# これらに興味がある人向けの記事です

– オブジェクト指向
– モデル化
– メタプログ

元記事を表示

本日の基礎練習問題(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

元記事を表示

OTHERカテゴリの最新記事