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

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

入力した一年後の日付を別のフィールドに自動入力する

やりたいこと:date_fieldに入力した値から一年マイナス1日の日付を別のdate_fieldに自動表示させる。
Ex applied_date columnに2021-01-01と入力したなら
expired_date columnに2022-12-31と自動表示させる。

“`ruby:qiita.js
$(document).ready(() => {
var applied = document.getElementById(“applied_date”);
applied.addEventListener(“change”, (event) => {
var appliedDateInput = new Date(event.target.value);
appliedDateInput.setFullYear(appliedDateInput.getFullYear()+1);
appliedDateInput.setDate(appliedDateInput.getDate() – 1);
var expiredDa

元記事を表示

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

#はじめに
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

元記事を表示

link_toの適用範囲を広げる

## 修正前

“`erb

<% users.each do |user| %>

<% end %>

<%= link_to user_path(user) do %>
<%= attachment_image_tag(user, :profile_image, format: 'jpeg', fallback: "user_image.jpg", size:'50x50', class: "user-image") %>
<% end %>

“`
このままだと、attachment_image_ta

元記事を表示

ブロックの理解を深める!

#①.ブロック

ブロックの復習から始めましょう!

まずは、ブロックを使った簡単なコードを以下に示します!

“`php:【例】sample.rb
ages = [20, 56, 32]

ages.each do |age|
puts age
end

# ターミナル出力結果
# 20
# 56
# 32
“`

上記は、eachメソッドで配列の要素を1つずつ取り出してターミナルに出力しています!

見慣れたコードかもしれませんが、実はこのdo〜endまでをRubyではブロックと呼びます!

また|age|のageはブロック変数と呼ばれます!

Rubyにおいて、ブロックは頻出の文法なのでまずは用語をしっかり覚えておきましょう!

また、ブロックをメソッドの引数として渡すことができるのもブロックの特徴です!

例えば、Rubyに標準で組み込まれているeachメソッドは、ブロックを引数として受け取るメソッドの代表例です!

以下の図のようにdo〜endまでのブロックそのものがeachメソッドの引数となり、繰り返し処理が行われています!

#②.ブロックの2種類の書き方を知る

元記事を表示

Modelとデータベース作成の手順解説についてのメモ

RubyonRails5速習実践ガイドの本を参考しました。
##モデルとマイグレーションファイルの作成
モデルとマイグレーションファイルを作成する。

“`
bin/rails g model モデル名 属性:データ型 name:string
“`
上記のコマンドで**モデルクラスを定義したファイル**と、**データ構造を定義したマイグレーションファイル**が作られる。

generatorで指定するモデル名は頭文字が大文字の単数形で指定します。
なぜかというとrailsのモデルとデータベースには二つの命名規則がある。

1.データベースのテーブル名はモデルのクラス名を複数形にしたもの。
2.モデルのクラス名はキャメルケース、テーブル名はスネークケース。

###マイグレーションファイルの中身を見てみる

自動で作られたマイグレーションファイルはこんな感じ↓

“`ruby
class Create複数形のテーブル名 < ActiveRecord::Migration[5.2] def change create_table :小文字のテーブル名 do |t|

元記事を表示

ExecJSが自動で選択するランタイムはどのように決まるのか

ExecJSはRubyからJavaScriptのプログラムを実行できるようにしてくれますが、プログラムを実行するランタイムは以下のようにベストなものを自動で選択してくれるようです。

> It automatically picks the best runtime available to evaluate your JavaScript program

逆に自分が意図したランタイムを設定したいときにはどうしたらいいのか、どう自動で選択してくれているのかが気になったので確認してみました。

https://github.com/rails/execjs

## version

execjs v2.8.1

## 結論

意図したものを選択させるには以下のどちらかを行う

* 環境変数 (`EXECJS_RUNTIME`) を設定する
* 自動読み込みの優先順位を確認し、他に優先度が高いランタイムが存在しないか確認する

## ランタイムの読み込み部分のコードを読んでいく

ExecJSのコードはとてもシンプルなので、コードを読むのが早いです。

“`rb:lib/execjs

元記事を表示

【個人開発】日常で生まれる悩みや不安を全て筋トレで解決するアプリを作ってみた。

# はじめに
いきなりですが、普段の生活の中で悩みや不安を抱えていませんか?
金銭的な悩みや友人などとの人間関係の悩み、将来のことなど、悩みは人様々だと思います。

そんな悩みや不安を解消したい、または少しでも軽くしたい思ったことはありませんか?

そこで、悩みや不安の解決方法を提示するアプリ**MUKINATOR(ムキネイター)**を作りました。

https://mukinator.com/

# アプリの概要
悩みのカテゴリー→悩みの順に選択すると、その悩みの解決方法とその理由を提示します。

# 機能
### 解決策の提示
悩みを選択するとその悩みに対する解決方法と、その解決方法である理由が出てくるようになっています。

### 筋トレ名言の表示
結果ページの前のローディングページではランダムで筋トレ名言を表示させています。

元記事を表示

【Rails】いいね一覧について

## はじめに
いいね機能を非同期通信で実装して、いいね一覧を作成した際に、
いいね一覧でいいねをはずしたときは、一覧から消えて欲しいなーと思い実装を試みたので、備忘録です。
色々話を聞いて完成に持っていくことができました。一部抜粋して今回の記事にしています。
いいね機能、いいねの非同期通信、いいね一覧表示については他にも記事が多くあるので、割愛します。
割愛した部分、下記を参考にして実装しました。実装完了後に今回の実装を行います。

https://qiita.com/ki_87/items/d0cf341aac9c0f1fd73a

https://qiita.com/ki_87/items/ba7de81d637aaf85e561

## 実装完成形

現在がこちら
![Qiitaいいね.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1994509/9ab62fc3-9c62-250c-8e1c-01a52705d71f.gif)

完成形がこちら
![Qiitaいいね2.gif](https:/

元記事を表示

Docker環境でRspecとRubocopを入れる場合のGithubとCircleCIの接続方法

環境

Mac0S Big Sur 11.5.2
ruby 3.0.2
rails 6.1.4
docker 20.10.6
MySQL 8.0.27

はじめに

Docker環境でRspecとRubocopを入れるまでの記事は多くあったのですが、その後GithubとCircleCIを接続する説明が書いてある記事はなかったので書くことに決めました。

RspecとRubocopのインストール方法はこちら
[Rspecのインストール方法](https://qiita.com/minoppp411/items/50f8599a3229d146c85c)
[Rubocopのインストール方法](https://qiita.com/minoppp411/items/bf82a0a3f794e70ab1b4)

CircleCIの導入と自動テスト

まず、[CircleCIのサイト](https://circleci.com/ja/vcs-authorize/)に飛んでGithubでログインし、CircleCIとGithubを接続します。

そして、テキストエディタで自分のプ

元記事を表示

【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

元記事を表示

OTHERカテゴリの最新記事