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

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

【RSpec】Railsチュートリアル第6版 第10章

#はじめに
Railsチュートリアル第6版のテストをRSpecで書き直していく。

###目次
– [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
– [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
– [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
– [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
– [第7章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)
– [第8章](https://qiita.com/supyolo888/items/508caaa40edf307093ed)
– [第9章](https://qiita.com/supyolo888/items/62e471b07a0c9a81575

元記事を表示

if文以外の条件分岐を学ぶ

#①.case文

Rubyにはif文以外にも条件分岐を表現する文法としてcase文があります!

case文とは、条件分岐を表現するための文法です!

複数の条件を指定する時に、if文のelsifを重ねるよりもシンプルにコードを書くことができます!

並列する条件が多数ある場合は、if文よりもcase文を使った方がコードとして読みやすくなります!

case文の構文は以下の通りです!

“`php:【例】sample.rb
case 対象のオブジェクトや式
when 値1
# 値1に一致する場合に実行する処理
when 値2
# 値2に一致する場合に実行する処理
when 値3
# 値3に一致する場合に実行する処理
else
# どれにも一致しない場合に実行する処理
end
“`
これだけだとわかりづらいので、具体的なコードを見てみます!

if文と比較しながらcase文のコードを見てみましょう!

例えば以下のようなコードがあったとします。まずはif文からです!

“`php:【例】sample.rb
country = “Japan”

if country ==

元記事を表示

Ruby on RailsとReactでECサイト構築

#概要
「[Laravelで同じ実装をドメイン駆動設計(DDD)とMVCで比較してみた(フロントはReact)](https://qiita.com/take-t14/items/71398530e451dcd0c183)」の検証で実装したECサイトを、Ruby on RailsとReactに移植してみました。ただ、Laravel版はMVC、DDD、軽量DDDの3種類で実装していましたが、Ruby on Rails版はMVCのみで実装しています。目的はLaravelとRuby on Railsのアーキテクチャの違いを知ることと、そこで得た知見を今後のソフトウェア開発に活かしたい事だった為です。見た目も機能もそっくりそのままLaravel版と同じです(バリデーションだけ若干簡略化しました)。 Ruby on RailsとReact初学者の為、至らぬ点が多々あるのはご容赦下さい・・・

#ソースコード
https://github.com/take-t14/rails-react-sample

#ミドルウェア
|ミドルウェア|バージョン|
| —- | —- |
|Postgre

元記事を表示

変数名に変数をいれる

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`

## 本題

“`
@ranking1 = Ranking.find_by(user_id: ranking_user_id, rank: 1)
@ranking2 = Ranking.find_by(user_id: ranking_user_id, rank: 2)
@ranking3 = Ranking.find_by(user_id: ranking_user_id, rank: 3)
“`

こんなコードがあり、リファクタリングしたかった

まずは普通に

“`
3.times do |n|
@ranking “#{n+1}” = Ranking.find_by(user_id: ranking_user_id, rank: n + 1)
end
“`
とかしてみる
しかしシンタックスエラー

書き方が悪いのかなっておもっていろいろやってみたけど
どうやら変数名に変数はいれられないみたい

___

https://qiita.c

元記事を表示

ぼっち演算子をつかって思いがけないエラー回避する

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`

## 本題
スクレイピングしてきたデータを使いやすいようにする

[![Image from Gyazo](https://i.gyazo.com/353482254a087cef277dc66b6caab0ea.png)](https://gyazo.com/353482254a087cef277dc66b6caab0ea)

こんなふうに `origin_shrine` のデータが入っていてこのままだと `chatkick` で使えない

やりたいことは( の前だけを取り出したい
今回のパターンだと使いたいのは熊野三山

そのために使うのは前方参照

“`
a = chart_shinto.origin_shrine.match(/(/).pre_match
“`

変数に `match` メソッドをつかって( を正規表現で探し当てる

そして `pre_match` メソッドをつかうことでその前の値を返す

実際に見てみると

[![Image from Gyazo](https://i

元記事を表示

toastr ブラウザバックで flash を表示させないようにする

`toastr` を導入した。

機能自体はうまく実装できたんだけど
`flash` が表示されているページにブラウザバックするとメッセージが表示されてしまうので修正した。

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`

## 前提
`gem “toastr-rails”` をつかって `toastr` の機能が実装できている

## 本題
最初はブラウザバックのイベントの検知して
`DOM` 操作で `notice` を削除したろって思ったんだけど
`toastr` が `DOM`操作してるわけじゃないからできなかった

修正するには ` JS` の挙動を制御する必要がある

___

`toastr` のコードを以下みたいにした

“`:js
$(window).on(“load”, function() {
toastr[‘#{type}’](‘#{msg}’);
})
“`
めっちゃ普通なんだけど

“`
$(window).on(“load”, function() {
“`

のイベ

元記事を表示

raty.js と kaminari ページネーションを繰り返すと星が消える

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`

## 前提
raty.js をつかって星の機能を実装している
raty.js への変数の受け渡しに gon を利用している
kaminari のページネーションを実装している

## 本題
`raty.js` と`kaminari` を使ったページで
何回かページ遷移を繰り返すと星が消える

ただそのページでリロードすると星が再び現れる
これは困った
___

ページ遷移後の `head` を見たときに `gon` の中身が変更されていないことに気づく

`gon` っていうのは `js` に変数を渡す `gem` で
コントローラーで変数に入れた値が `head` タグに中に入り
そこから `js` に渡される仕組み

実際の検証ツールの値は

[![Image from Gyazo](https://i.gyazo.com/2e9389541ad04c4e30c9eb9de6b7a26d.png)](https://gyazo.com/2e9389541ad04c4e30c9eb9de6b7a2

元記事を表示

chartkick メタ文字を利用してブランクな要素をつくる

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`

## 前提
`gem chartkick` をつかって棒グラフを実装している

## 本題

`chartkick` で棒グラフを作ってるんだけど

[![Image from Gyazo](https://i.gyazo.com/5c2ad40ed2bfa7bea289bf199cbab613.png)](https://gyazo.com/5c2ad40ed2bfa7bea289bf199cbab613)

要素が少ないとブサイクになる

これを

[![Image from Gyazo](https://i.gyazo.com/6a0ffdf7f99ef7e4fa953f813ae34368.png)](https://gyazo.com/6a0ffdf7f99ef7e4fa953f813ae34368)

こうするためにいろいろやった

___

まず考えたのは要素の大きさを細くすること

しかしうまいことやり方がわからず

で、次に考えたのが今回の本題。

まずはそもそもの部分 `c

元記事を表示

slim タグの中に変数を入れるコード

## 開発環境
`ruby 2.6.5`
`slim-rails`

`erb` では割と見る

“`

“`

と変換される

変数展開はされてるんだけどされかたがおかしい

本来は

“`

“`
となってほしいところ

___

“`
.comment-content #this_comment_comment.id
`

元記事を表示

geocoder 住所からの緯度経度の算出

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`

## 本題

`geocoder` を使っていて
名称から緯度経度は算出はできるのに
住所からは算出できない問題があった

例えば

[![Image from Gyazo](https://i.gyazo.com/371010af7910ebb82dd8227d6e82f5f7.png)](https://gyazo.com/371010af7910ebb82dd8227d6e82f5f7)

こんなかんじ

___

https://qiita.com/roark/items/2fedc1ebac763e72d70b

上の記事曰く
`geocoder` の地図の初期設定は `nominatim` っていうものらしい
その精度だと住所からの算出はできないとのこと

どうやら自分は `google map` の `API` を使えていなかったみたい

なので

“`
bin/rails g geocoder:config
“`

で設定ファイルを作り

“`
Geocoder.config

元記事を表示

CSV ファイルの書き込み

## 開発環境
`ruby 2.6.5`

## 本題
スクレイピングをしていて

[![Image from Gyazo](https://i.gyazo.com/6a4409849f74303f368c039a18267a1e.png)](https://gyazo.com/6a4409849f74303f368c039a18267a1e)

こんなかんじで `@cat_list` の中にほしい情報をいれて
CSVファイルに書き込もうと思い

“`
CSV.open(“result.csv”, “w”, :force_quotes=>true) do |csv|
@cat_list.each do |info|
csv << info end end ``` するとエラー 内容は ``` /Users/isamutatsuya/.rbenv/versions/2.6.5/lib/ruby/2.6.0/csv/writer.rb:37:in `<<': undefined method `collect' for "王子神社":String (NoMethod

元記事を表示

【Rails】enum_help使用してselectボックス作成

検索するとmapを使っているやり方がほとんどだったがこっちの方がシンプルに書ける

##環境
Ruby 3.0.2
Rails 6.1.4.1

##やり方
enum_help使用

“`model.rb
class Employee < ApplicationRecord enum status: { enrollment: 0, resigned: 1 } end ``` - ```Employee.statuses_i18n```はenum_helpで使えるようになるもの ```ruby Employee.statuses_i18n #=> {“enrollment”=>”在職中”, “resigned”=>”退職済み”}
“`

“`html.slim
f.collection_select :status, Employee.statuses_i18n.to_a, :first, :last, {}, class: ‘hogehoge’
“`

“`
f.collection_select(メソッド名, オブジェクトの配列, value属性の項目, テキ

元記事を表示

ruby インスタンス変数

`rails` で当たり前のように扱っているインスタンス変数

http://devtesting.jp/tddbc/?TDDBC%E5%A4%A7%E9%98%AA2.0%2F%E8%AA%B2%E9%A1%8C

上記の自動販売機プログラムで改めて考えた

“`
class VendingMachine
MONEY = [10, 50, 100, 500, 1000].freeze
def initialize
@slot_money = 3
end
def current_slot_money
@slot_money
end
def slot_money(money)
return false unless MONEY.include?(money)
@slot_money += money
end
def return_money
puts @slot_money
@slot_money = 0
end
end

“`

上みたいな自販機プログラムを書く
その上で irb で

“`

元記事を表示

PG ConnectionBad エラー

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`
`postgresql 13.4`

[![Image from Gyazo](https://i.gyazo.com/ca4228c29bdcf2ce607cb214275b6ea6.png)](https://gyazo.com/ca4228c29bdcf2ce607cb214275b6ea6)

昨日起動できていたアプリが今日になって `reils s` したらエラー

___

https://qiita.com/great084/items/98c83364f246473249c4

どうやら昨日の `pid` が残ってしまっているよう

“`
rm /usr/local/var/postgres/postmaster.pid

brew services restart postgresql

“`
したら無事起動

元記事を表示

Google map の導入

`Ruby on Rails` のアプリに `Google map` を導入するためには
`Google` の `API` と `Ruby` の `gem` を使う必要がある

導入にあたって抑えとく部分のまとめを

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`
## Google の提供する API

・`Google` マップを使うにあたって `Googlemap` の `API` と `geocoder` の `API` を所得する必要あり

・`Google map` の `API` は `Google map` を使用するもの

・`geocoder` の `API` は経度や緯度から目的地を算出する `API`(逆もあり)

・参考にさせていただいた記事以下

 https://qiita.com/nagase_toya/items/e49977efb686ed05eadb

・上の記事を参考にすると
[![Image from Gyazo](https://i.gyazo.com/6d38ef3d05b2e1a3d3f30c85

元記事を表示

スクレイピング ページ遷移しながらデータ収集

## 開発環境
ruby 2.6.5

https://qiita.com/ichihara-development/items/d2c240a0c5258881cdcf

上の記事を参考にさせてもらって

yahoo ニュースのデータを
CSVファイルに格納するスクリプトを書いてみた

[![Image from Gyazo](https://i.gyazo.com/6aa1000d810d864bc23e8a49e4005522.png)](https://gyazo.com/6aa1000d810d864bc23e8a49e4005522)

ここのページネーションでページ遷移しながら

[![Image from Gyazo](https://i.gyazo.com/683a3d3b66d77ca361fd5dd235bac78b.png)](https://gyazo.com/683a3d3b66d77ca361fd5dd235bac78b)

全ての記事のタイトルを所得する試み

ここまで出来ればいろいろ自動化できそう

スクリプトは以下

“`
require ‘n

元記事を表示

ruby 配列を変更するメソッド

## drop メソッド
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/drop.html

“`
e = [1, 2, 3, 4, 5, 0]
e.drop(3) # => [4, 5, 0]
“`

引き数に与えた数の要素を先頭から削除して
配列を返す

## pop メソッド

https://docs.ruby-lang.org/ja/latest/method/Array/i/pop.html

“`
e = [1, 2, 3, 4, 5, 0]
e.pop(3) # => [1, 2, 3]
“`

引数に指定した数の要素を末尾から削除して
配列を返す

## unshift メソッド

https://docs.ruby-lang.org/ja/latest/method/Array/i/unshift.html

“`
e = [1, 2, 3, 4, 5, 0]
e.unshift(3) # => [3, 1, 2, 3, 4, 5, 0]
“`

引数に与え

元記事を表示

スクレイピング nokogiri

※スクレイピングは自己責任でお願いします

参考にさせていただいた記事は以下

https://nokogiri.org/tutorials/parsing_an_html_xml_document.html

https://github.com/sparklemotion/nokogiri

https://qiita.com/kotaokubo/items/78f89610dc05a317e78a

[![Image from Gyazo](https://i.gyazo.com/724a4ed7279e04760ec5990d1ab92d40.png)](https://gyazo.com/724a4ed7279e04760ec5990d1ab92d40)

こんなかんじの表を

[![Image from Gyazo](https://i.gyazo.com/5267266d75fa24197b14bb207a1b0571.png)](https://gyazo.com/5267266d75fa24197b14bb207a1b0571)

こんなかんじで取り込める

#

元記事を表示

spring が読み込まれない

## 開発環境
ruby 2.6.5
Ruby on Rails 5.2.5
Bundler 2.2.24

## 本題

以前いろいろあってruby をアンインストールした
その関係で rails を再インストール

その後

“`
rails new アプリ名 -d postgresql -d –skip bundle`
“`

をすると下記のエラー

“`
bundler: failed to load command: spring (/Users/isamutatsuya/workspace/nokogiriapp/vendor/bundle/ruby/2.6.0/bin/spring)
“`

`bundle install` をスキップしてるのになんでこんなエラーが出るかは不明
しかしどうやら `spring` が読み込まれていない

___

https://qiita.com/KONTA2019/items/1d2fc90b5020486b0504

上の記事を参考にして

“`
gem update –system
“`

するとエラーがでなくなった

元記事を表示

【Rails】f.labelで最初の文字のみ大文字になってしまう

##環境
Ruby 3.0.2
Rails 6.1.4.1

##状況

“`html.slim

= f.label ‘ID’
“`

最初の文字のみが大文字で、「Id」と表示されてしまう

##解決法

“`html.slim

= f.label :id, ‘ID’
“`

“`
f.label(メソッド名 [, ラベル配下のコンテンツ, オプション])
“`

第1引数にオブジェクトのメソッド名が来ることを想定しているため、第2引数にラベル名を指定する

https://railsdoc.com/page/label

元記事を表示

OTHERカテゴリの最新記事