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

Ruby関連のことを調べてみた2020年01月16日
目次

#Ruby Error class message / raise second args or Error class initialized message

“`rb
raise StandardError.new(‘ERROR in class’)
# StandardError: ERROR in class

raise StandardError, ‘ERROR in raise arg’
# StandardError: ERROR in raise arg

raise StandardError.new(‘ERROR in class’), ‘ERROR in raise arg’
# StandardError: ERROR in raise arg

“`

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2948

元記事を表示

rails g migrate で外部キーを追加する

ポートフォリオ作成中に後から外部キーを追加しよとしたら、コマンドに詰まったので忘れないために記事にしておく。

articleテーブルにuser_idを追加する

“`
rails g migration AddUserRefToArticles user:references
“`

成功したら

“`
rake db:migrate
“`
を実行する。

元記事を表示

rubyでファイル末尾の改行を消す

git diffしたときの
「\ No newline at end of file」がウザいのでrubyで置換した

・パターン1

“`ruby
ruby -i -ne ‘print ARGF.eof? ? $_.chomp : $_’ test.txt
“`

・パターン2

“`ruby
ruby -i -e ‘print ARGF.read.strip’ test.txt
“`

sedでやりたかったな

もっといい方法あれば教えて下さい

viで↓をやるのがめんどくさかった
https://qiita.com/lemtosh469/items/b3a5b3b40d9f44dfbd06

(本当は末尾に改行がある方が正しいらしい)

元記事を表示

[Ruby]ネストされたHash(連想配列)をフラット(1階層)にする②

最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!

#Hash(連想配列)を取り除く
前回からの続きです!
・[[Ruby]ネストされたHash(連想配列)をフラット(1階層)にする①
](https://qiita.com/hirokik-0076/items/771325ab561851af0dbb/)

ここからやっていきたいのは配列に入っている要素がHashだったら変数に変換する処理します。
要は、配列に入っている要素をチェックしてHashだったら特定の処理をしたら良いのです。

“`ruby
#配列の場合
family_array = [ “sazae”, “masuo”, “tarao” ]
pry(main)> family_array.is_a?(Hash)
=> false

#連想配列の場合
family_hash = { “tsuma” => “sazae”, “otto” => “masuo”, “ko

元記事を表示

heroku 登録から(rails mysql)デプロイまで

##ローカルでは動作確認済みのRailsアプリを、heroku初デプロイ##

###環境###

– heroku
– MacBookpro
– ruby 2.6.3
– bundrer 2.0.2
– rails 6.0.1
– Mysql2 0.5.3
– GitHub にて git clone(もしくは push) してある状態

<今後の時短のために記録> 今回Qiita自己用記録も含め、10時間かかった様子。
他でデプロイに14日かけてうまく行かず…原因がMVCではない事を再認識できた。知識不足、書籍等を活用する予定。
heroku1日で出来るのは有難い。

**①heroku にアカウント登録**
https://jp.heroku.com/

<<AWS と違い、基本ローカルからコマンド 入力 >>

**②config/routes.rbのindex編集**

“`
Rails.application.routes.draw do
resources :blogs
root ‘home#top’ #トップページ:homeコントローラの

元記事を表示

[Ruby]ネストされたHash(連想配列)をフラット(1階層)にする①

最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!

#Arra(配列)とHash(連想配列)
・[ChefTips: RubyのArray(配列)とHash(連想配列)入門](https://qiita.com/kentarok/items/5d38c3f7df37a7396ef9/)
###Array(配列) とは
>Arrayは、イメージしやすく言うと複数のValue(値)が入っている入れ物です。順番(添字)をつけてValue(値)を管理します。順番は1からではなく、0から始まります。

“`ruby
# Array family_array を定義
family_array = [ “sazae”, “masuo”, “tarao” ]
“`

###Hash(連想配列) とは
>ArrayはValue(値)を管理するために添字を使いますが、Hashは添字の代わりにKeyを使います。KeyとValueのペアは “=>”

元記事を表示

Rails modelのjoin戦略についての理解を深める1歩

こちらの記事。よく参考にしてます。
https://qiita.com/k0kubun/items/80c5a5494f53bb88dc58

ここで言っているキャッシュとは何か?
同記事の最後の表についてなんとなくふわっとした理解でした。
特にキャッシュする・しないについて。
それについてまとめました。

## Rails modelって
そのmodelに定義されたリレーションに則ってデータを取得できます

“`rb
class User < ApplicationRecord has_many :invoices ... ``` というUserモデルがあったとして ```rb user = User.first invoice = user.invoices ``` というふうに取得できますね その時、invoicesはどのタイミングで取得する(SQLが発行される)かというと ```rb user.invoices ``` としたタイミングです ## 結合してみよう 先程のmodelを使って結合してみよう ### joins ```rb user = User

元記事を表示

JavaScriptでinputのパスワードの黒丸のところを文字で表示させてみた!!

##はじめに
某プログラミングスクールで、メ○○リのコピーサイトを作成しました。
チームメンバーが実装していた、ボタンを押すとパスワードの黒丸を文字として表示させる
実装を今日はやっていきたいと思います!と思ったのですが、
すでに下記の参考記事で簡単に作成できました。
[パスワード表示時にマスキング有無を選択できるようにする方法](https://ajike.github.io/password-masking/)

なので、自分のメモ用で記載していきます。
ちなみにこんな感じのものを実装していきます。
![a1a64a26379e2a3036884ebbf0b4aa88.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560478/9fdc5620-b5e3-eefd-c0c7-41715242835c.gif)

##解説
1.まずパスワードを文字として表示していきます。
![](https://i.gyazo.com/95d186805d87d2d203b94367e310beb8.png)
 (1

元記事を表示

GemのソースをTracePointを使って効率的に読む

Rubyには様々な便利なGemがあるので有効活用しない手はないですよね。
ただ使っているGemが予期せぬ挙動をした時やドキュメントに載ってないような詳細仕様を知りたい時などにソースを読みたくなることがあります。

Gemのソースを読みたい場合、GithubなどWeb上に公開されていることが多いのでブラウザでソースを見たり、ローカルにソースを落としてきて見たりすると思います。

ただ愚直にソースを読み始めるとソース量が膨大だったり、メタプロが多用されていたりなどで読解がかなり大変です。
そこでこの記事ではTracePointを使って効率的にソースを読む方法を紹介します。

# ソースを読んでみよう
具体例があった方が良いので、今回はrailsの`find_or_create_by`を使った場合に呼ばれるソースを探すことにしましょう。
https://github.com/rails/rails

今回はローカルマシンにチェックアウトして読むことにします。
この記事では6-0-stableブランチ(2020/01/14時点)を使っています。

## 愚直にやってみよう
該当箇所の探し方は人

元記事を表示

日程がかぶっているかどうかを判定するロジック

# はじめに
日程がかぶっているかどうかを判定するロジックって結構書く機会が多い気がするんですけど、正面から考えると複雑で読みにくいコードになってしまいがちだと思います。

今回はこれを割とスッキリ書けるロジックについて書いてみたいと思います。

# 要件
予定Aと予定Bがかぶっているかどうかを判定するロジックを書く。
例)予定A:2019/10/4 10:00~11:00
  予定B:2019/10/4 10:30~11:30
  →期待値:かぶっている(true)

# 予定がかぶるケース
全部で5つあります。(図で示せればいいんですが…すいません?)
①予定Aと予定Bが丸かぶりの場合(2019/10/4 10:00~11:00と2019/10/4 10:00~11:00)
②予定Aの終了時刻のみが予定Bの範囲内の場合(2019/10/4 10:00~11:00と2019/10/4 10:30~11:30)
③予定Aの開始時刻のみが予定Bの範囲内の場合(2019/10/4 10:00~11:00と2019/10/4 9:30~10:30)
④予定Aが予定Bに覆いかぶさっている場合(

元記事を表示

react_on_railsでReact Hooksを使うと’Invalid hook call.’のエラーが出て動かない場合の解決策

## はじめに
タイトル通りですが、react_on_railsでReact Hooksを使うと’Invalid hook call.’のエラーが出て動かない場合の解決策です。

React Hooksの文法が間違っていたり、ライブラリのバージョンが不適切だったりが原因ではなくて沼にはまりかけたので参考になれば幸いです。

## エラーの詳細
React公式サイトの以下のエラーになります。
https://reactjs.org/docs/error-decoder.html/?invariant=321

## 公式の対応方針
React公式サイトの以下のページです。
https://reactjs.org/warnings/invalid-hook-call-warning.html

要約すると、
①React DOMのバージョンが間違っていないか?
②Hooksのルールを破っていないか?
③Reactが二重でインストールされていないか?
の3点です。

私の場合、以上の3点が原因ではなかったようで解決しませんでした。

## 解決策
参考になったのは以下のreact_on_ra

元記事を表示

AWS EC2でCould not find pg-1.1.4 in any of the sources Run `bundle install` to install missing gems.と表示される

こんにちは[@yukifreeworld12](https://twitter.com/yukifreeworld12)です。
EC2でエラーが出て解決したのでメモとして、そして後世の同じエラーにハマった人の為にも…

#1. エラー文
EC2でGitと連携しクローンしていた終盤

“`
$ rake secret
Could not find pg-1.1.4 in any of the sources
Run `bundle install` to install missing gems.

$ gem install pg
Building native extensions. This could take a while…
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
<略>

To see why this extension failed to compile, please check the mkmf.log which can be found he

元記事を表示

Railsで作ったSNSアプリでユーザの投稿へのコメント作成機能を実装する

・参考URL
https://sadah.github.io/rails-training/ja/004_comments.html

今回紹介するコードは、プログラミングスクールで学んだTwitterクローンを基にしたRailsのアプリ(Micropost)への追加機能であることを前提にするとコードが読みやすくなると思います。

#モデルの作成
“`
rails g model Comment content:string user:references micropost:references
“`
コメントはUserとMicropostの多:多の関係性を表すため、中間テーブルが必要になります。
Userがコメントする投稿が複数あって、MicropostにはコメントしたUserが複数いるためです。
###マイグレーションファイル
“`ruby:年月日時_create_relationships.rb
class CreateComments < ActiveRecord::Migration[5.2] def change create_table :commen

元記事を表示

Web系開発周りの自分用まとめ:学習:Ruby

# 0. 概要
Progateを使ってRubyを学んでみての感想をまとめてみた。
他言語と比較しての感想とかも混ざってる。
今後Rubyを書いてみて、あれ?これどうするんだっけ?といったときに見返す用。

# 1. 感想
– 演算子
– インクリメント演算子++が使えない
– 条件式
– elseifじゃなくてelsifなのにびっくり
– 括弧
– くくらない言語なのでちょっと違和感(VBAとかもだけど)
– 加えて、多言語での中括弧終わりに相当するのが“end“
– 文字列内””くくりでの変数展開が#{}なのが他でみたことない感じ
– 文字列と数値の+での結合ができない言語なので上をつかわないとダメ
– each doに違和感
– 慣習(と思われるもの「)
– 変数名はスネークケース
– 配列は複数形、each doでのループ回す時のループ変数は単数形
– タブ(インデント)は半角スペース2つ
– bool値を返すメソッド名の末尾は?をつける
– クラス名は大文字開始(というか言語仕様的に大文字以外できない)
– メソッドはキーワード

元記事を表示

Rails(Ruby)アプリからスプレッドシートに書き込み

## GCP側のでやること
GCPのコンソール(`https://cloud.google.com`)から、
・「Google Drive API」と「Google Sheets API」を有効化
スクリーンショット 2020-01-15 15.49.43.png
スクリーンショット 2020-01-15 15.48.27.png

・OAuth Client ID取得
スクリーンショット 202</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>GoogleDrive</div>
<div class='tag-cloud-link'>SheetsAPI</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/wktq/items/e5ed7d1446554b5df41b'>元記事を表示</a></div>
<h3 id=【初心者向け】Rubyで超簡単ドリンク注文アプリケーション(リファクタリングver)

#@scivola さんよりアドバイスいただき、DRYな部分を整理しました。
こちらの記事は
https://qiita.com/pontarou194/items/9e91b40dcc2da608dd24
の続きです。

もともとは、メソッドが4つありました。。。。

otyaメソッド
coffeeメソッド
beerメソッド
saidaメソッド

これを一つにまとめられました。
もともとはこんな感じ。

#これがメソッドの多いアプリケーション(進化前)

“`rb
def otya(otya)
puts “あなたが選んだのはお茶”
puts “お茶の値段は100円です”
puts “いくつ注文しますか?”
order_quantity = gets.to_i
total_price = order_quantity * otya
puts “合計#{total_price}円です”
end

def coffee(coffee)
puts “あなたが選んだのはコーヒー”
puts “コーヒーの値段は200円です”
puts “いくつ注文しますか?

元記事を表示

railsでレコードに保存している「連続した改行」を改行を保持したままviewに表示する

#環境
Rails 5.2.3
Ruby 2.6.3

#実現したいこと
例えばArticleモデルのcontentカラムに保存している、
「あいうえお

かきこけこ」
をviewに表示したい。

#解決策
safe_join関数を利用し、改行文字をbrに変換する。
simple_format 関数もあるのだが連続改行が認識されないため、
safe_join関数を利用する。

“`haml:show.html.haml
= safe_join(@article.content.split(“\n”), tag(:br))
“`
#参照
https://api.rubyonrails.org/classes/ERB/Util.html#method-c-html_escape

元記事を表示

【Ruby初心者向け】打順の組み方を変えて得点の入り方をシミュレーションして比較してみた

##概要
野球が好きなので、打順の最適な組み方をついつい考えてしまいます。

ある検証で**「強打者と弱い打者を交互に並べる」よりも「強打者を下位打線に固める」方が得点が入りやすい**という結果が出たというのを知り、単純化したモデルで検証してみようと思い試してみました。

**本格的な検証ではない**ので、Rubyを使って何か簡単な検証や計算を行ってみたいという人に大雑把な流れだけわかってもらえれば嬉しいです。

##前提条件

– 3割打者5人と2割打者4人の2タイプを用意
– 打者は凡打か単打のみを打つ
– 凡打においてランナーは進塁せず、3連打で1点が入る
– 3連打以上では安打のたびに1得点を追加
– エラーや四死球は簡略化のため考慮しない
– 盗塁や送りバントはセイバーメトリクスで推奨されないので行わない
– 1万試合回して合計得点を競う

この超簡略化した野球で2タイプの打者の打順を入れ替えて、どれだけ得点が入るかを検証します。ただ四死球と長打を全て排除するのはあまりにも酷なので、あとでそれらを考慮したコードも紹介していきます。

打順の組み方は

– 上位5人に3割打者を

元記事を表示

アプリにLINE Pay決済を導入する簡易手引き(LINE Pay API – v3)

株式会社OKANで「[おかんPay](https://apps.apple.com/jp/app/%E3%81%8A%E3%81%8B%E3%82%93pay/id930164902)」の開発(フロント/バックエンド)に携わっているsuzu_Dと申します。
このアプリを簡単に説明すると、「オフィスおかん」という置型の社食サービスで、小銭を使わずキャッシュレス決済ができるアプリとなっております。
今まで当アプリではクレジットカードを登録し支払う、という方法でのみの決済でしたが、
2019年12月の目玉アップデートとして、当アプリ経由でLINE Pay決済ができる機能をリリースしました。

今回は、技術的なお話というよりLINE Payを組み込む際に、今現在ネットの情報だけだと自分的には不足している部分があり
「そもそもLINE Pay APIに通信できない・・・」といった事が多発し、[LINE Payの技術スタッフ](https://pay.line.me/documents/online_v3_ja.html#payment-apis)の方と何回かやり取りさせていただいたので、
その中

元記事を表示

あっさり読むrails③(クラス)

#はじめに
[前回の記事](https://qiita.com/Moon1126Snow/items/d7e942bdb9dcc2cf4f55)にて、
`もちろんこのままだと味気ないので、実際にはclassを設定したり、他のメソッドを使用することになります`と書きました。
本記事では、その`classを設定する`の部分を実行しようと思います。
#実行
前回使用したコードを改良しようと思います。今の所、コードは下記の通りです。

“`haml
– @products.each do |product|
= product.name
= product.price
= image_tag(product.image)
“`

まずは、`name`,`price`,`image`をひとまとめにするクラスを作ります。

“`haml:index.html.haml
– @products.each do |product|
.product
= product.name
= product.price
= image_tag(product.ima

元記事を表示

OTHERカテゴリの最新記事