- 1. Rails 6.0で”Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1.”という警告が出たときの対処法
- 2. Rails テーブルにcommentを追加するマイグレーションファイル
- 3. Ruby カラオケマシン問題 解いてみた(解答例あり)
- 4. [Ruby]配列で要素を習得する際の添え字の役割
- 5. 『オブジェクト指向設計実践ガイド』を読んでいく
- 6. 【Ruby on Rails+devise+sendgrid】Signupでのメール送信機能を使う手順解説
- 7. rails での初めてのページネーション機能の追加
- 8. Ruby で始める GraphQL Client
- 9. Hello RSpec
- 10. Active Record、複雑なクエリ
- 11. Ruby : Nokogiriが自分でエンコーディングを参照しに行く場所を調べてみた
- 12. “ExecJS::RuntimeError”
- 13. Ruby と Python で解く AtCoder ABC130 D 累積和 二分探索
- 14. % rails db:createするとmimemagic に起因するLoadErrorががが
- 15. RSpec RequestSpecでsessionを利用する
- 16. railsでGoogleMapAPIの導入
- 17. MySQLのモードに関して
- 18. 【Ruby】僕がしていたモジュールにしていた勘違い【初学者】
- 19. こんなソースコードはイヤだ-クォーテーションはシングルなのダブルなの?
- 20. ruby subメソッドで使用した正規表現について
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 #=> 7a = [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.4Rails 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の勉強中の僕がしていたモジュールに関する勘違いを勝手に紹介します。
⬇勘違いしていたときのコード⬇
⬇正解コード(間違いがあればご指摘いただけると幸いです)⬇
違いとしてはモジュールの記述されている「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個目をちゃんとけしてくれます。なぜに???
・・・・・
まぁ番地のみ取得という問題は解決しているので
そういうもんだろうと今は割り切って次に進みます。
まだまだ、勉強中なもので、、、
今後勉強していけば