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

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

【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種類の書き方を知る

元記事を表示

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

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

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

そこで、悩みや不安の解決方法を提示するアプリ**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:/

元記事を表示

【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

元記事を表示

OTHERカテゴリの最新記事