Ruby関連のことを調べてみた2019年11月30日

Ruby関連のことを調べてみた2019年11月30日
目次

クラス変数とインスタンス変数

職場で「クラス変数とクラスインスタンス変数の違い」が話題にあがっていて、以前理解したよな、と思いつつ咄嗟に整理して述べられないなと思ったので、思い出しつつまとめてみる。

基本的にはクラス変数とインスタンス変数というものがある。

まずサンプルコード。

“`ruby
class Parent
@@var = ‘class variable of Parent’
@var = ‘instance variable of Parent (so called class instance variable)’

class << self def at_at_var @@var end def at_var @var end end def initialize @var = 'instance variable of parent' end def at_at_var @@var end def at_var @var end end ``` # インスタン

元記事を表示

#Ruby の pry を vim で複数行入力/ファイル編集できる edit コマンドが便利すぎる件 ( how to input multiline on ruby pry )

– vimで複数行入力できる
– ~/.pryrc でエディタを設定すれば他のエディタも使えるはず
– 1回のセッション内だと、ファイル状態を覚えていてくれて、 edit コマンドで何回でも続きから編集・実行できる
– 今までの単一行で入力しづらすぎた苦労はなんだったのか、rubyファイルを作成してからincludeしようとしたり、エディタからコピペ実行したり、なんだかんだと
– 新しいバージョンでは複数行入力自体に対応していたかと思うけど、全く自由に入力できるこちらの方が数段良いね
– 全く知らなくてRuby人生の半分を損していた気がするのだが

“`
gem install pry
“`

“`
pry
“`

“`
[1] pry(main)> edit
“`

![image](https://user-images.githubusercontent.com/13635059/69862155-2cfbe700-12dd-11ea-803b-95f6df240986.png)
![image](https://user-images.githubusercont

元記事を表示

Twitterでのコード投稿の見栄えどうにかならんのと思った話

たぶん、長い投稿

# きっかけ(こんな呟きを見かけた

# 出来たもの
– [Codr0:https://codr0.herok

元記事を表示

ABC085C – Otoshidama

#問題
スクリーンショット 2019-11-29 21.59.08.png

#回答
“`ruby
N,Y = gets.chomp.split.map(&:to_i)

x = -1
y = -1
z = -1

N.step( 0, -1 ) do |i|
if 10000 * i > Y
next
else
( N – i ).step( 0, -1 ) do |j|
if 10000 * i + 5000 * j + 1000 * ( N – i – j ) == Y
x = i
y = j
z = N – i – j
break
end
end
if x != -1 || y

元記事を表示

HamlをRuby on Railsアプリケーションに導入する方法

##Hamlとは

Hamlとは、HTMLを簡潔かつ簡単に記述できるマークアップ言語。

##Railsで使用する場合の手順

###1. Hamlを導入
Gemfileの一番下にコードを記述すると、すべての環境でhamlが使用できる。
記述後は、**bundle installを忘れずに** 。

“`ruby:Gemfile
gem ‘haml-rails’
“`

###2. erbファイルをHamlに変換
rails newにより、erbファイルがすでに作成されているので
拡張子がerbのファイルをhamlに変換する。

####一括変換する方法
ターミナルから以下のコマンドを実行。

“`
$ rails haml:erb2haml
“`
ここで、

“`
Would you like to delete the original .erb files? (This is not recommended unless you are under version control.) (y/n)
“`
と聞かれたら、状況に応じてy/nを選択する。

**元のerbファ

元記事を表示

【Rails】Docker+Rails環境でpryの`edit`コマンドが使えなかったので、使えるようにした

## はじめに
DockerとRailsを使った開発環境でpryの`edit`コマンドが効かなかったので対処してみたときの記録です。

※Docker環境下での話です。**ローカルでは普通に動作**しましたので、割愛します。

## この記事が役に立つ方
– あれ?なんか`edit`コマンド効かなくね?と思っている方

## この記事のメリット
– Docker環境下でpryの`edit`コマンドが使えるようになる

## 環境
– macOS Catalina 10.15.1
– zsh: 5.7.1
– Ruby: 2.6.5
– Rails: 5.2.3
– Docker: 19.03.5
– docker-compose: 1.24.1

## pryの`edit`コマンドとは?

以下、公式のWikiです。
[Editor integration · pry/pry Wiki · GitHub](https://github.com/pry/pry/wiki/Editor-integration)

> The edit command is used to invoke y

元記事を表示

インスタのような感じのアプリを作るスパイラル仕様

1.文字投稿サイト
ヘッダーのパーシャルを使う。
文字投稿はRESTfulな入力フォームを使う。

2.ユーザー登録機能
ヘッダーにifでログイン状態のときに表示を変える。
投稿に対して名前が付与される。この時に関連付けが利用される。
postテーブルの関連付けからuser.nameをひっぱる。postにはuser_idを追加

簡略化のために名前とメールアドレスだけで認証を行う。
パスワードはあとでok

3.画像機能
画像が投稿で追加される。
取得できればそんなに難しくない。

3.5 いいね機能
そんなに難しくはないと思う。

4.関連付けでフォロー
できないことはないと思う。

これ以降
細かい機能を取り付け

元記事を表示

【Ruby on Rails】開発環境構築(MacOS)

##MacOSの状態を確認
**Catalina**以降の場合と**Mojave**以前の場合で環境構築の設定が異なります。

##OSがMojave以前の場合の環境構築
###❶Command Line Toolsを用意
**Command Line Tool**sはWebアプリケーション開発に必要なソフトウェアをダウンロードするために必要な機能です。

“`
$ xcode-select –install
“`

###❷Homebrewを用意

“`
$ cd #ホームディレクトリに移動
$ pwd #ホームディレクトリにいるかどうか確認
$ ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” #コマンドを実行
“`

※処理に時間がかかる可能性のある操作です。

「`Press RETURN to continue or any other key to abort`」と表示されたら、「`続けるにはエンターキーを、やめるにはそれ以外の入力

元記事を表示

#Rails ( or #Ruby + ActiveSupport ) : Time.zone.now VS Time.current what is difference? when specify Time.zone then used ActiveSupport::TimeWithZone class else use Time class

“`rb
require ‘active_support/core_ext’

# No Time.zone setting

Time.use_zone(nil) { Time.current }
# => 2019-11-29 07:38:04 +0900

Time.use_zone(nil) { Time.current.class }
# => Time

# with Time.zone setting
# Time.current class changed Time to ActiveSupport::TimeWithZone

Time.use_zone(‘UTC’) { Time.current }
# => Thu, 28 Nov 2019 22:38:20 UTC +00:00

Time.use_zone(‘UTC’) { Time.current.class }
# => ActiveSupport::TimeWithZone

Time.use_zone(‘UTC’) { Time.zone.now }
# => Thu, 28 Nov 2019

元記事を表示

#Rails ( or #Ruby + ActiveSupport ) + travel_to : freeze to localtime beggining of year and ref UTC date and time and timestamp

“`rb
# REQUIRE : on Ruby

require ‘active_support/testing/time_helpers’
# => true

require ‘active_support/core_ext’
# => true

include ActiveSupport::Testing::TimeHelpers
# => Object

# Travel to JST beggining of Year

travel_to Time.use_zone(‘Tokyo’) { Time.parse(‘2020-01-01 00:00’) }
# => nil

# JST

Time.use_zone(‘Tokyo’) { Time.current }
# => Wed, 01 Jan 2020 00:00:00 JST +09:00

Time.use_zone(‘Tokyo’) { Time.zone.now }
# => Wed, 01 Jan 2020 00:00:00 JST +09:00

Time.use_zone(‘Tokyo’) {

元記事を表示

#Rails ( or #Ruby + ActiveSupport ) の Time.zone.now と Time.current の違いは Time.zone 指定の有無であり、Time class と ActiveSupport::TimeWithZone class が切り替わることが判明

“`rb
require ‘active_support/core_ext’

# No Time.zone setting

Time.use_zone(nil) { Time.current }
# => 2019-11-29 07:38:04 +0900

Time.use_zone(nil) { Time.current.class }
# => Time

# with Time.zone setting
# Time.current class changed Time to ActiveSupport::TimeWithZone

Time.use_zone(‘UTC’) { Time.current }
# => Thu, 28 Nov 2019 22:38:20 UTC +00:00

Time.use_zone(‘UTC’) { Time.current.class }
# => ActiveSupport::TimeWithZone

Time.use_zone(‘UTC’) { Time.zone.now }
# => Thu, 28 Nov 2019

元記事を表示

初めてのRuby on Rails

#はじめに

このQiitaは、プログラミング未経験の初心者がRailsチュートリアルに取り組み
学んだことを記録、振り返るために書いていきます。
###今までやったこと
Progateで

– HTML
– CSS
– Ruby
– Ruby on Rails5
– Git
– CommandLine
– SQL
– HTMLとCSSを学んだ後に一度架空のホームページの見た目だけ作成

**PC環境** 

– MacBook Pro Mid2012(古いです)

– macOS Mojave ver 10.14.6

**エディタ**

– Visual Studio Code ver 1.40.2

#最初のアプリケーション

「Hello,World」を表示するプログラム

1.ターミナルでcd….. ホームディレクトリに移動
2.cd environment…..作成したenvironmentディレクトリに移動
3.rails new…..railsアプリの骨組みを作成

ターミナルで

“`
$ rails _5.1.6_ ne

元記事を表示

rubyのバージョンアップ

# rubyのバージョンアップする時の方法

この記事は私の備忘録として記載していきます。
何か間違っている場合があれば、ご指摘していただけると助かります。

####現在の環境
ruby 2.6.3
rails 5.2.3

#### 目的
rubyのバージョンを2.6.5にしたいです。

環境にバージョンがあるか確認します。

“`ruby
$ rbenv install –list
“`

もし、指定したいバージョンがなければ

“`ruby
$ brew upgrade ruby-build
“`
をしてください。

もう一度確認で

“`ruby
$ rbenv install –list
“`

#### rbenvでインストール
指定したいバージョンがあれば次に、rbenvでインストールをします。

“`ruby
$ rbenv install 2.6.5
“`
インストールされました!!

#### インストールしたバージョンを使用する時

“`ruby
$ rbenv versions
system
2.4.1
2.5.1

元記事を表示

【Ruby on Rails】新規アプリケーション作成まとめ

#Rubyとは
###Ruby(プログラミンング言語)
Rubyはプログラミング言語の一つであり、Javaなどの他のプログラミング言語に比べて、少ないソースコードの記述量でプログラムを組めるなどの特徴があります。([Ruby公式サイト](https://www.ruby-lang.org/ja/))

#Ruby on Rails
###Ruby on Rails
RubyのWebアプリケーションフレームワークの一つであり、Webアプリケーションフレームワークとは、Webアプリケーションを簡単に作れるようにする骨組みのことです。
フレームワークを使用することで、開発者はより少ない労力で開発を行うことが可能になります。

##Rails開発環境の構築
Rails開発ではデータベース(MySQL)やRails自体のインストールなど、まずは開発のできる環境を整える必要があります。([Rails開発環境構築](https://qiita.com/ikeyuk/items/76c6a217a796e72a02e7))

– Homebrewのインストール・アップデート
– rbenv・ruby-

元記事を表示

#Rails ( or #Ruby + ActiveSupport ) + travel で 現地時刻 = JST で特定日付に時間を固定して、それぞれUTC JST timestamp で現在時刻・日付を得る例

“`rb
# REQUIRE : on Ruby

require ‘active_support/testing/time_helpers’
# => true

require ‘active_support/core_ext’
# => true

include ActiveSupport::Testing::TimeHelpers
# => Object

# Travel to JST beggining of Year

travel_to Time.use_zone(‘Tokyo’) { Time.parse(‘2020-01-01 00:00’) }
# => nil

# JST

Time.use_zone(‘Tokyo’) { Time.now }
# => 2020-01-01 00:00:00 +0900

Time.use_zone(‘Tokyo’) { Time.current }
# => Wed, 01 Jan 2020 00:00:00 JST +09:00

Time.use_zone(‘Tokyo’) { Time.zone.now }

元記事を表示

やさしい図解で学ぶ モデル マイグレーション その2

その1ではテーブルの設計図となるマイグレーションファイルにて紹介しましたが今回は「**モデルについて**」と「**アソシエーション (関連性)について**」を基礎に学んでいきます。

## ⭐️モデルについて
まずモデルファイルとは
**DBとのデータのやりとりをするために重要なファイル**とイメージしてください。

ファイルには
**モデル(テーブル)間の関係性**を記述したり、
**DBにあるテーブルに直接データの保存、呼び出しを可能にする**機能を備えています。

スクリーンショット 2019-11-27 18.11.52.pngselectタグで複数選択に変えたら、ストロングマラメーターによってパラメーターが排除されてしまった

webサイトを作成中にselect_tagを複数選択に変えたら、 入力した値が排除されてしまい少しハマってしまったので同じミスをしないためにまとめます。

#エラーが発生した状況
スクリーンショット 2019-11-29 0.19.10.png
上の写真のようにselect_tagを複数選択に変えたところ、これまで正常に登録ができていたにもかかわらず、登録できないエラーが発生した。
ログをみてみると、「Unpermitted parameter: :category_id」となっており、ストロングパラメータで弾かれ、paramsの値がnilになっていることが原因のようだった。
スクリーンショット 2019-11-29 0.20.07.pngRailsチュートリアル学習メモ2

## データ更新(rails cから)
“`terminal
[1] pry(main)> post = Post.find_by(id: 1)
[2] pry(main)> post.content = “ああああああ”
[3] pry(main)> post.save
“`

## データの削除(rails cから)
“`terminal
[1] pry(main)> post = Post.find_by(id: 1)
[2] pry(main)> post.destroy
[3] pry(main)> post.save
“`

## link_toでmethodを指定する
“`ruby
link_to(“文言”, “パス”, {method: “post”})
“`

## modelにvalidationを設定
“`ruby:modes/post
validates :content, {presence: true, length: {maximum: 100}}
// presenceはカラムが存在するか確認する
“`

## renderメソッド
r

【Ruby】配列のnilチェック+部分一致検索

## やりたいこと
1. Rubyハッシュ(連想配列)のnilチェック
2. 配列の部分一致検索

### 1. Rubyのハッシュ(連想配列)のnilチェック

– 最初はif文でnilチェックをやろうと思ったけど、Ruby2.3で導入された`dig()`を使う方が簡単だった

“`ruby
params.dig(:q, :name)
“`

### 2. 配列の部分一致検索

“`ruby
search_text = ‘検索したい文字’
array.select { |e| e =~ %r{^.*#{search_text}.*} }
“`

– `#{}`で囲うとで変数を入れられる
– `%r{}`で正規表現オブジェクトを作成した場合、パターン内に「/」が含まれていてもエスケープは不要らしい。便利!

「もっとこうした方が楽だよ!」と言った知見があれば、コメントお待ちしてます

## 参考サイト
– [サンプルコードでわかる!Ruby 2.3の主な新機能 – Qiita](https://qiita.com/jnchito/items/0faac073cb774

#Rails ( #Ruby + ActiveSupport ) + Time.use_zone + travel_to で現地時刻=日本時刻=JSTを固定して UTC 変換結果を見て遊ぶ例

– タイムゾーンの9時間の扱いを一生かかっても覚えられる気がしない
– 足し算と引き算を間違える確率が65%
– Rubyで遊んでいたらだんだん分かってきた気がするけれど
– タイムゾーンに慣れ親しむだけで1週間かかって、3日で忘れる気がした

“`rb
require ‘active_support/core_ext’

# 日本時間の年始の時間
jst_beggining_of_year = Time.use_zone(‘Tokyo’) { Time.local(2020, 01, 01, 00, 00, 00) }

# travel するために必要
require ‘active_support/testing/time_helpers’
include ActiveSupport::Testing::TimeHelpers

# 日本時間の年始に時間を固定する
travel_to jst_beggining_of_year

# 今日の日付は 2020-01-01
Date.current
# => Wed, 01 Jan 2020

# 現在時刻は 2020-01-01