Ruby関連のことを調べてみた2020年05月28日

Ruby関連のことを調べてみた2020年05月28日

Rails 6.0で”Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1.”という警告が出たときの対処法

## はじめに

MySQLを使っている既存のRailsアプリケーションをRails 6.0にアップデートすると、次のような警告が出ることがあります。

“`
DEPRECATION WARNING: Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1. To continue case sensitive comparison on the :name attribute in User model, pass `case_sensitive: true` option explicitly to the uniqueness validator.
“`

> (翻訳)
> 非推奨の警告: UniquenessバリデータはRails 6.1で「強制的に大文字小文字を区別する比較」をしなくなります。Userモデルの`:name`属性について引き続き「大文字小文字を区別する比較」を使い続けたい場合は、uniquenessバリデータに対して明示的に`case_sensiti

元記事を表示

Rails テーブルにcommentを追加するマイグレーションファイル

## マイグレーションファイル
“`ruby
class AddCommmentsToStaffEmail < ActiveRecord::Migration[6.0] def change change_column_comment(:staff_emails, :employee_id, '業者ID') end end ``` ### change_column_comment change_column_commentにテーブル名、カラム名、コメント内容 を記載する ``` change_column_comment(:table_name, :column_name, 'contents') ``` ## 環境 - activerecord (6.0) ## 実行手順 マイグレーションファイル作成 **コマンド** ```cmd. $bundel exec rails g migration AddCommentsToTable ``` マイグレーションの実行 **コマンド** ```cmd. $bundel exec rake

元記事を表示

Ruby カラオケマシン問題 解いてみた(解答例あり)

# はじめに
『プロを目指す人のためのRuby入門』通称チェリー本を学習後のプログラミング初心者です。
インプットしたものを手を動かして実践してみたいなと思ったら、作者の記事を見つけました。
[「アウトプットのネタに困ったらこれ!?Ruby初心者向けのプログラミング問題を集めてみた(全10問)」] (https://blog.jnito.com/entry/2019/05/03/121235)

この二つ目の問題を解いてみました。

[一問目](https://qiita.com/u_nayama/items/389b229bd569fdfc1874):カレンダー作成問題(たのしいRuby 練習問題)

# 問題

詳しくは[実際の問題文](https://blog.jnito.com/entry/2014/06/06/104420)をみてください。
問題知ってる人は、[解答例へジャンプ](#解答例)。
><前提>

カラオケにはキーを変える機能があります。
+1するとキーが1つ上がります。
-1するとキーが1つ下がります。
たとえば「ドレミファソ」というメロディのキーを2つ上げる

元記事を表示

[Ruby]配列で要素を習得する際の添え字の役割

添え字について、読み流していたのでこの機会にまとめてみました。

##配列における添え字の役割

“`ruby:添え字

a = [1,2,3,4,5,6,7]
a[2,5] #=> [3,4,5,6,7]
“`

引数のひとつ目が、位置
引数のふたつ目が、長さを表す。

ちなみに

“`ruby:添え字の代入

a = [1,2,3,4,5,6,7]
a[2,5]= 777
a #=> [1,2,777]
“`
要素の3番目から、5つの要素一括で777に置き換わります。

***
##values_atとlast

こっからは配列のおまけ。

“`ruby:values_at
a = [1,2,3,4,5,6,7]
a.values_at[2,5] #=> [3,6]

a = [1,2,3,4,5,6,7]
a.values_at[2,5,6] #=> [3,6,7]
“`
取得したい要素の数に応じて、添え字を追加できる。

“`ruby:last

a = [1,2,3,4,5,6,7]
a.last #=> 7

a = [1,2,3,4,5,6,7]
a.l

元記事を表示

『オブジェクト指向設計実践ガイド』を読んでいく

# 決意表明

1か月ちょい~2か月かけて少しずつ読み進めたい。

# 要点
## オブジェクト指向プログラミングの概要・導入
### 1. オブジェクト指向設計

#### 1.1 設計の賞賛

– オブジェクト指向設計の手法に従えば、コーディングを楽しくし、かつ最も効率良くソフトウェアを生産できる!
– オブジェクト指向設計 = 依存関係を管理すること。
– 部品
– オブジェクト
– 相互作用
– メッセージ
– 設計の目的は変更コストの削減。

#### 1.2 設計の道具

– 設計原則『SOLID』
– デザインパターン『GoF』

#### 1.3 設計の行為

– BUFD(ウォーターフォール?)とオブジェクト指向設計とでは”設計”の意味が異なる。
– BUFD
– 未来の内部動作を特定した、完全な文書化。
– オブジェクト指向設計
– 変更を前提とした、小さな領域におけるコード構成。

#### 1.4 オブジェクト指向プログラミングのかんたんな導入

– 手続き型言語

元記事を表示

【Ruby on Rails+devise+sendgrid】Signupでのメール送信機能を使う手順解説

# 環境
ruby 2.6.4

Rails 5.2.4.2

rbenv 1.1.2

mysql2 0.5.3

# やりたいこと
コピペのみでメール送信機能を実装できる手順を紹介します

元ネタは
[【Rails5.2/sendgrid】超簡単!Signupのメール送信を本番環境で使うための手順(Heroku)Part1](https://www.twinzlabo.com/rails_sendgrid_easy/)です

sendgridを使って簡単に実装していきます

# sendgrid導入手順
### 1. Herokuにプロジェクトを作成
“`
$ heroku create
“`

### 2. プロジェクト名を変更
“`
$ heroku rename 変更後のプロジェクト名
“`

### 3. プッシュ
“`
$ git push heroku master
“`

### 4. sendgridコマンドを通す
“`
$ heroku addons:create sendgrid:starter
“`

### 5. sendgridペー

元記事を表示

rails での初めてのページネーション機能の追加

#rails での初めてのページネーション機能の追加
参考にした記事(https://qiita.com/residenti/items/1ae1e5ceb59c0729c0b9)

##ページネーションとは
長くなってしまったコンテンツを複数のページに分割して情報を読み取ることです。
googleの検索結果などが例に挙げられます。

##まずgemのinstall
kaminariというgemを使って実装します。

“`ruby:gemfile
gem’kaminari’, ‘~> 0.17.0’
“`

rails5系ではkaminariのバージョンを上記のように指定しないと動作しないそうです。bundle installします。

##コントローラー

“`ruby:topics_controller
@topics=Topic.page(params[:page]).per(5)
“`

@topics=Topic.all
を上記のように変更しました。perメソッドで1ページに何件まで表示するか決定します。

##View

“`ruby:index.html.er

元記事を表示

Ruby で始める GraphQL Client

## これは何

* Ruby のコードから GraphQL API を叩く方法を紹介します
* Ruby のコードで GraphQL API を作る方法は紹介しません

## GraphQL とは

GraphQL とは何か、を一言で表現するのは難しいのですが、個人的には「API を表現するプロトコルの一種」というような認識です。
REST API と比較されることが多いです。REST API で

“`
curl http://example.com/users/123/posts/
“`

のようにして叩くところを、GraphQL では

“`
curl http://example.com/graphql -X POST –data ‘
{
user(“123”) {
posts {
title
}
}
}

“`

のように叩きます。REST API では `/users/` `/users/123/` `/users/123/posts/` のように様々な URL にリクエストを投げて目的の情報

元記事を表示

Hello RSpec

新人のRailsエンジニアです。
RailsのTestをするにあたってRSpecを学んだのでまとめてみました。
100日後に1人前になるエンジニアを連載中です。本日は7日目
ちなみにMinitestとRSpecの比較については[こちら](https://qiita.com/akilax/items/93bf1137cc8832acb096)

##RSpecとは
RubyやRuby on Railsで作ったクラスやメソッドをテストするためのドメイン特化言語 (DSL)を使ったフレームワーク。
つまりは、テスト専用のプログラム言語とも言えます。

###FactoryBot
テスト用のデータの作成をサポートするgem
FactoryBotを利用するとテスト用のデータを簡単に準備できる
Rails標準ではFixtureという仕組みもありますが、
こちらよりもデータの状態やデータ間の関係性を掴みやすい。
ということで今回はこちらも使用。

###Capybara
WebアプリケーションのE2E(End-to-End)テスト用フレームワーク。
RSpecなどと組み合わせて使います。Webアプリ

元記事を表示

Active Record、複雑なクエリ

Active Recordでちょっと複雑な問い合わせを書いた時に、忘れないようにメモとして追記していきます。

## 関連テーブルのレコード数でソート
“`rb
class PLine < ApplicationRecord has_many :likes, dependent: :destroy end class Like < ApplicationRecord belongs_to :p_line end ``` ```rb @p_lines = PLine.select('p_lines.*', 'count(likes.id) AS favs') .left_joins(:likes) .group('p_lines.id') .order('favs desc') ``` ```erb <% @p_lines.each do |p_line| %>

<%= p_line.p_line %>

<%= p_line.favs %> points

元記事を表示

Ruby : Nokogiriが自分でエンコーディングを参照しに行く場所を調べてみた

#はじめに
[こちら](https://qiita.com/tetoralynx/items/022394386c7edc2bcb6f)の記事で、Nokogiriはエンコーディング指定が`nil`だったときに、パース元のhtmlのmeta要素のcharsetを見に行くと結論づけました。
今回は結論が本当にあっているか確かめるために、公式ドキュメントを追ってみた話です。

#公式ドキュメントを追ってみる
[Nokogiri公式ドキュメント](http://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/HTML.parse)
今回はこちらの公式ドキュメントを追っていきます。もちろん英語です。
普段自分は英語の公式ドキュメントは避けがちなのですが、決心して見に行ってみます。英語は読めなくてもコードなら読めます。多分。

#Nokogiri::HTML::Documentクラス
普通Nokogiriを使ってパースするときには`Nokogiri::HTML.parse(html)`のように書いているのですが、正式には`Nokog

元記事を表示

“ExecJS::RuntimeError”

####起動はするのに、、、

railsにて、初めの段階でハマったのでメモメモ。

##エラー内容
ExecJS::RuntimeError

###バージョン
Rails 5.2.4
ruby 2.5.1

###解決策
Gemfile
>gem ‘mini_racer’, platforms: :ruby

上記のコメントアウトを外してあげて、ターミナルで[bundle install]してあげれば、完了。

##参考URL
ExecJS::RuntimeError(2019年版)
https://github.com/railsgirls-jp/coach.info/issues/27

元記事を表示

Ruby と Python で解く AtCoder ABC130 D 累積和 二分探索

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Beginner Contest D – Enough Array](https://atcoder.jp/contests/abc130/tasks/abc130_d)*
Difficulty: 859

今回のテーマ、累積和 + 二分探索

問題文`(条件)連続部分列に含まれる全ての要素の値の和は、K 以上である。`より累積和を使用することが分かりますが、`1≦N≦100_000`ですので2重にループを回すと`TLE`になります。
そこで、累積和は単調増加ですので、計算量を抑えるために二分探索も併用します。
# Ruby
“`ruby.rb
n, k = gets.split.map(&:to_i)
a = gets

元記事を表示

% rails db:createするとmimemagic に起因するLoadErrorががが

“`terminal

% rails db:create
rails aborted!
LoadError: cannot load such file — mimemagic
/projects/〜〜〜/config/application.rb:7:in `


/projects/〜〜〜/Rakefile:4:in `

bin/rails:4:in `

“`
git hubからとあるファイルをcloneしdb:createをした際に生じたエラー

まいむまじっく…….???
なかなかマイナーなファイルが原因を引き起こしてるっぽいけども・・・

ひとりでは解決困難!!先輩の力を借りてる最中、Qiitaをみてみるとこんな記事が

a.com/zQmjRAb73seN5RM/items/5fa74d2a4d346cdd386e

バージョンの問題っぽい・・・?
その通りにコマンドを実行してみた

“`terminal
$gem list 〇〇
//〇〇には該当ファイルを入れる(今回だとmimemagic)
“`
結果は.

元記事を表示

RSpec RequestSpecでsessionを利用する

Rspec request specでセッションの読み込み、書き込みを実現してみる

今回はActionDispatch::Requestのsessionメソッドを上書きする形で対応します

“`ruby
allow_any_instance_of(ActionDispatch::Request).to receive(:session).and_return({})
“`

### 事前にセッションを書き込む方法

`rails_helper.rb` に上記のsessionメソッド上書きを実装します

“`ruby:rails_helper.rb

RSpec.configure do |config|
# …

# テストケース共通の事前処理
config.before(:each) do

# let(:rspec_session) で指定された値を セッションの初期値とします
session = defined?(rspec_session) ? rspec_session : {}

# destroyメソッドを実行してもエラー

元記事を表示

railsでGoogleMapAPIの導入

## このページのコードでできること
・自分のrailsプロジェクトにGoogleMapを埋め込み、表示させる。
・ページを開いたら地図と、初期値のマーカーを表示させる。
・inputボックスと検索ボタンを用意。
・inputボックスに検索したい場所を入力し、検索ボタンを押すことでその場所の地図を表示。

## Maps JavaScript API & Geocoding APIの取得

これら記事にお世話になりました。(参考文献より)

[コードを書く前に]
(https://qiita.com/nagaseToya/items/e49977efb686ed05eadb)
[Google Maps API を使ってみた]
(https://qiita.com/Haruka-Ogawa/items/997401a2edcd20e61037)
[Google MAP 名称から場所を検索・特定する](https://qiita.com/yoshi_yast/items/521c1f36306a180f45dd)
[オリジナルアプリ作成 〜RailsでGoogleMap利用検証〜]
(h

元記事を表示

MySQLのモードに関して

# 自分のローカルで設定されているモード

“`
$ mysql –version
mysql Ver 14.14 Distrib 5.7.29, for osx10.15 (x86_64) using EditLine wrapper
$ mysql -uroot -p
mysql> select @@global.sql_mode;
+——————————————————————————————————————————————————+
| @@global.sql_mode |
+——————-

元記事を表示

【Ruby】僕がしていたモジュールにしていた勘違い【初学者】

Rubyの勉強中の僕がしていたモジュールに関する勘違いを勝手に紹介します。

⬇勘違いしていたときのコード⬇
ruby_module1.png
⬇正解コード(間違いがあればご指摘いただけると幸いです)⬇
ruby_module2.png
違いとしてはモジュールの記述されている「thinkable.rb」に
“`require “./human”“`
があるかないかの違いです。
実際、あってもなくても実行結果に変化はありませんがこの記述は

元記事を表示

こんなソースコードはイヤだ-クォーテーションはシングルなのダブルなの?

プログラムのソースコードのより良い書き方をまとめていこうと思います。

# クォーテーションはシングルなのダブルなの?

“`sample.sh
name=”Taro”
age=19
country=’Japan’
greeting=”I am $name. I am ${age} years old. I live in $country”
echo $greeting
“`

[どのようにリファクタリングできるのか](https://www.sentohsharyoga.com/ja/bad_source_code/entry/single_or_double_quotation)

元記事を表示

ruby subメソッドで使用した正規表現について

address=”都道府県,市区町村,番地,建物名部屋番号”
という変数があり、ここから、番地を取得したいとします。
結論からいうと、

address.split(“,”)[2]

ですが、
正規表現でチャレンジしました。

まずはsubで、戦闘の「都道府県,」を消して、それを2回繰り返そうと思いました。
のこった「番地,建物名部屋番号」から、「,」以降を消して終わりです。

まずは1回だけのバージョンでテスト
address.sub(/.+,/,”)
「都道府県,」のみが消える予定です。

結果
“建物名部屋番号”
となっちゃいました。

/.+,/の部分が「都道府県,」になるだろうと予測したのですが、
「都道府県,市区町村,番地,」になっちゃいます。

試しに
address.sub(/,/,”)
としてみると
「都道府県市区町村,番地,建物名部屋番号」
となり、最初の1個目をちゃんとけしてくれます。

なぜに???

・・・・・
まぁ番地のみ取得という問題は解決しているので
そういうもんだろうと今は割り切って次に進みます。
まだまだ、勉強中なもので、、、
今後勉強していけば

元記事を表示

OTHERカテゴリの最新記事