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

Rails関連のことを調べてみた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

元記事を表示

railsチュートリアル第11章 送信メールのプレビュー 送信メールのテスト

###送信メールのプレビュー
テンプレートの実際の表示を簡単に確認するために、メールプレビューという裏技を使う。
Railsでは、特殊なURLにアクセスするとメールのメッセージをその場でプレビューすることができます。
これを利用するには、アプリケーションのdevelopment環境の設定に手を加える必要がある。

####development環境のメール設定
config/environments/development.rb

“`rb
Rails.application.configure do
.
.
.
config.action_mailer.raise_delivery_errors = false

host = ‘example.com’ # ここをコピペすると失敗します。自分の環境のホストに変えてください。
# クラウドIDEの場合は以下をお使いください
config.action_mailer.default_url_options = { host: host, protocol: ‘https’ }
# localhostで開

元記事を表示

railsチュートリアル第11章 アカウント有効化のメール送信

##アカウント有効化のメール送信
アカウント有効化メールの送信に必要なコードを追加
このメソッドではAction Mailerライブラリを使ってUserのメイラーを追加
 Usersコントローラのcreateアクションで有効化リンクをメール送信するために使います。
このテンプレートの中に有効化トークンとメールアドレスのリンクを含め、使っていきます。

###送信メールのテンプレート

####メイラーの生成
“`
ubuntu:~/environment/sample_app (account-activation) $ rails generate mailer UserMailer account_activation password_reset
Running via Spring preloader in process 11611
create app/mailers/user_mailer.rb
invoke erb
create app/views/user_mailer
create app/views

元記事を表示

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

元記事を表示

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

元記事を表示

未経験からRails,AWS,Docker,CircleCI,GitHubでポートフォリオ作成しました

はじめに

未経験から**Ruby on Rails**, **AWS**, **Docker**, **CircleCI**, **GitHub**を一から学習し、Webアプリを作成してみました。

この記事ではアプリの紹介や実装機能、開発する上での苦労した点をお伝えします。
ポートフォリオをアップデートした際にはこちらの記事も更新していきます。

アプリの概要

エンジニアが作成したポートフォリオを投稿、共有できるSNSアプリです。

– エンジニアの為のポートフォリオ共有サイトがない。
– 既存の投稿サイトだとポートフォリオが埋もれてしまう。

これらの問題を解決するために「Portfoliofor」というサービスを開発しました。
URLは下記

元記事を表示

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

元記事を表示

【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 配列を変更するメソッド

## 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]
“`

引数に与え

元記事を表示

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

元記事を表示

Docker環境のRuboCopのインストール手順と具体的な使い方

Rubocopとは

RuboCopとはRuby用のLintツールです。
設定ファイルを編集することでコーディングスタイルのチェック項目をカスタマイズできたり、RuboCop用のgemを追加することで機能の拡張ができたりします。
コードに対して行われるさまざまなチェックをRuboCopではCopと呼びます。

環境

Docker 20.10.6
ruby 3.0.2
rails 6.1.4

Railsプロジェクトにrubocopを導入する手順

####Gemのインストール

`rubocop`をGemfileに追加します。また、Railsアプリケーションでrubocopを利用する際によく導入されている`rubocop-performance`、`rubocop-rails`、`rubocop-rspec`もあわせて追加します。

“`ruby:Gemfile
group :development do
gem ‘rubocop’, require: false
gem “rubocop-performance”, require: false
ge

元記事を表示

The `development` database is not configured for the `development` environment.の解決法

HerokuにpushしてからHeroku openした時に出てきたエラーです。

エラー

“`
The `development` database is not configured for the `development` environment.
“`

原因

database.ymlのインデントが間違えているから

解決

“`ruby:database.yml
# MySQL. Versions 5.5.8 and up are supported.
#
# Install the MySQL driver
# gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
# gem ‘mysql2’
#
# And be sure to use new-style password hashing:
# https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
#
default: &d

元記事を表示

OTHERカテゴリの最新記事