Rails関連のことを調べてみた2020年12月23日

Rails関連のことを調べてみた2020年12月23日

Rails:find,find_by,whereについて簡単にまとめた

# 最初に

**カレンダー企画2020の23日目**
プログラミングの勉強を始めて3ヵ月程経ったので学んだことのメモをアウトプットとして記事に残します。
これからプログラミングの世界に入る人の手助けになれたら嬉しい限りです。
間違っていたり、言葉が違っていたり、誤解されるような言葉があったら教えてください^^
言葉を長々と読みづらかったら申し訳ありません。少しずつなれてがんばります。

## find,find_by,whereについて

個人的に訳わからず調べて自分なりに解釈した内容です。
他にも細かく載っている記事はたくさんあると思うのでここでは大枠、捉え方ぐらいに思って貰えればいいかと^^;(詳しく書いてもどっかの受け売りでコピペになるのでね^^;)

find,find_by,whereこれらはDB(データベース)から必要な情報だけを取り出す為に必要な理解です。
WEBアプリケーションを作成するなら絶対どれかは使う。

## これだけ覚える

(検索というのは私なりの解釈です。ご了承ください)

|メソッド|検索範囲|取得するデータ|
|:-:|:-:|:-:|
| fin

元記事を表示

Homebrew + rbenv + ruby-build の関係性(後編)実際にrubyとRailsの導入もできます!

前回の記事ではbrewでインストールしたプログラムが`/usr/local/Celler`ディレクトリなどに入りシンボリンクを作成することでパスが通ること、各ディレクトリ構成について説明しました。今回は実際に`rbenv`と`ruby-build`をインストールして、それぞれのコマンドで何をしているのかを説明していきます。

# rbenv, ruby-buildのインストール
まずはbrewを最新の状態にしておきます。

“`
% brew update
“`

次に`rbenv`と`ruby-build`のインストールです。ruby-buildはrbenvのプラグインの1つです。rbenv installというRubyのバージョンをインストールするコマンドを提供しています。rbenvをインストールする際に、セットでインストールします。

“`
% brew install rbenv ruby-build
“`

## RBENV_

元記事を表示

Railsの賞味期限を延ばす方法をまとめてみる

## はじめに

年末になりアドベントカレンダーが盛り上がってますね。Railsのエントリーも賑わっています。
以下のエントリーに触発されて、大規模な開発になっても少しでもうまく開発が進む方法まとめてみようと思いました。

https://blog.unasuke.com/2020/i-have-to-learn-those-things-in-the-future/

## 考え方

この記事では、DDDやアーキテクチャについて議論は取り扱わず、具体的なRubyのコーディング方法を中心にまとめていきます。
まず、原則的になぜRailsが大規模に向かないのか?開発が進むにつれしんどくなっていく理由について考えてみます。

大規模開発に向かない理由:
– **クラスやオブジェクトの参照箇所が正確に把握できない。このため、リファクタリングはもちろん機能追加などがやり辛く、開発のスピード・品質が悪くなっていく。**

こんな経験ありませんか?
– Gemのソースコードを追っ

元記事を表示

Payjp v2 ざっくり実装

#最近Payjpのv2なるものがリリースされたらしく、Payjp側もセキュリティの向上のためv2の使用を推奨しているらしいです。
少し前に質問があり、気になったので実装してみました。忘れないようにメモとして記事作りました。
細かい説明は省きます。リファレンス見れば誰でも簡単に実装できます。

# v1との違いは?
“`
v1ではトークン化APIのみを提供しており、カード情報入力フォームは加盟店側で用意する必要がありました。

しかしより安全なクレジットカード商取引のために、最新のPCI-DSSでは、カード情報入力フォームを決済代行業者側で用意することが求められています。
で、
payjp.js v2では、これらのフォームを弊社ドメインのiframe内で用意し、かつ独自スタイルの適用・イベント監視などv1で実現できた機能を提供いたします。 加えて、カード番号入力時の自動フォーマットやレスポンシブデザインなど、ニーズの高かった機能をデフォルトで提供致します。
“`
との事です。Payjp側で用意された入力フォームを使えるので、わざわざ作らなくて良い感じらしいですね。
ところでPCI

元記事を表示

Railsのバリデーション設定でハマった話

こんばんは
アロハな男、やすのりです!

今日はポートフォリオ作成中にモデルのバリデーションでハマった話をしていきたいと思います!!

もしかしたら明日は我が身かも…?

#結論
Userモデルのパスワードへのバリデーションは

“`ruby
on: :create
“`
を使おう!

#ハマった時の状況
え、いやどういうこと…?
となってしまうと思うので、順を追って説明していきます。

まずポートフォリオではユーザーが会員登録された場合は、専用のマイページがあったり口コミ投稿ができたりする機能をRailsのGemである`devise`で作成していました。

そんな機能の中で、マイページで行える**『自身のユーザー情報変更機能ページ』**で事件が起こりました…

#何があったのか?
ユーザー情報の変更ページではユーザー名やアイコン画像等を変更することができるページなんですが、`devise`を使用していると通常は変更の際に毎回パスワードの入力が必要になります。

ただ、『少しの変更で毎回パスワードを入力するのは面倒だなぁ…』という人のために、パスワードを入力しなくて

元記事を表示

[Ruby]作成されてから〇〇以上経ったレコードのみ取得・選択する方法

#作成されてから〇〇以上経ったレコードのみ取得・選択する方法

##結論
`Record.where(‘created_at < ?', 1.minute.ago).order(created_at: :desc)` 重要なのは`('created_at < ?', 〇〇)` 〇〇に好きな条件を入れるだけ。 1時間前なら`1.hour.ago` 1日前なら`1.day.ago` ##質問 クオーテーション使わない方法やベタープラクティスってありますか? 意外と見つけづらい情報でした。。。

元記事を表示

【Rails】 LIKEで複数の値で検索する方法

# LIKEで複数の値で検索する方法
LIKEで複数の値で検索する方法をメモとして残します。

“`gem ‘activerecord-like’“`を使えばもっと簡単にできるのですが、別の方法として実装してみました。

* https://github.com/ReneB/activerecord-like

#

“`ruby

scope = User.all
names = [‘yama’, ‘mae’]
search_sql = []

names = names.map do |n|
search_sql.push(‘name like ?’)
“%#{name}%”
end

scope = scope.where( search_sql.join(‘ or ‘), *names )
“`

元記事を表示

Homebrew + rbenv + ruby-build の関係性(前編)

# はじめに
最近rubyの管理を`rbenv`から`anyenv`経由で`rbenv`をインストールする形式に変えようと思っていました。というのも、`.zshrc`(bashを使う人は`.bash_profile`)にanyenvのパスを通すだけで済むのでファイルをきれいに保てるというのが1番の理由です。その移行方法について調べている際に「rbenvをよくわかってなかったなあ」と感じたので記事を書くことにしました。また、今回の記事は「`homebrew`でインストールしたとき」を想定しています。

# brewでインストールしたものはどこにある?
まず私はこんな基本的なこともわたしは理解していませんでした。homebrewでインストールしたものは`/usr/local/Celler`に入るようになっています。「`/usr/local/Celler`にパスを通したことなんてない!」と思ったのですが、homebrew の仕組みにしたがって、適切なバージョンの実行可能ファイルに `/usr/local/bin` からのシンボリックリンク(ショートカット)が作成されるみたいです。つまり、`/

元記事を表示

本番環境でassets/imagesの配下の画像を表示させたい

ローカル環境では
app/assets/imagesの配下の画像を表示させることができているが、本番環境になると、画像をうまく読み込まない。
これは、ローカルと本番環境では、パスが違うかららしい。

ローカルは以下のコードで画像を表示させることができる。

“`erb
<%= image_tag hoge.png", class:"hoge" %>
“`
本番環境では、`asset_path`を使う必要がある。

“`erb
<%= image_tag asset_path("/images/hoge.png", class:"hoge") %>
“`

元記事を表示

【Rails】 姓・名それぞれがDBのカラムとして格納されているレコードの検索方法

# 姓・名それぞれがDBのカラムとして格納されているレコードの検索方法

すでにたくさんの記事が出ていますが、自分がよく使うものを忘れないようにメモしました。

#

“`ruby
name = ‘山田 太郎’
scope = User.all

if name.include?(‘ ‘) || name.include?(‘ ’)
# 全角スペース を 半角スペース へ置き換え
name = name.tr(‘ ’, ‘ ‘) if name.include?(‘ ’)
# 姓・名を分割
last_name, first_name = name.split(‘ ‘)
# and 条件で検索
scope = scope.where(‘last_name LIKE ? AND first_name LIKE ?’, “%#{last_name}%”, “%#{first_name}%”)
else
# 姓名どちらかのみ入力されている場合
scope = scope.where(‘last_name LIKE :name

元記事を表示

【Rails】 日時がそれぞれのカラムを持っているときの検索方法

# 日時がそれぞれのカラムを持っているときの検索方法

日付および時間がそれぞれ文字列としてDBに格納されている時の検索方法をメモとして残します。

#

“`ruby
start_datetime = ‘2020/12/22 23:35’
scope = Post.all

start_date, start_time = start_datetime.split(‘ ‘)
# 該当する日付以降のものを抽出
scope = scope.where(‘start_date >= ?’, start_date)
# start_date が等しい時の該当しない時間を除去
scope = scope.where.not(‘start_date = ? AND start_time < ?', start_date, start_time) ``` # 参考 * Rails における内部結合、外部結合まとめ * https://qiita.com/yuyasat/items/c2ad37b5a24a58ee3d30

元記事を表示

Stripe Billing を使ってサービスに月額課金のシステムを組み込む際に必要な実装ってめちゃくちゃ少ない

[Ateam Group Manager & Specialist Advent Calendar 2020](https://qiita.com/advent-calendar/2020/ateam)の23日目は
Increments株式会社の @phigasui が担当します。

近年よくみる、月額課金サービス。
単発購入の決済のシステム導入に比べて実装すべき決済にまつわる機能が多くて大変なイメージないですか?

月額課金のサービスでは下記機能が必要とされると思います。

– トライアル期間の設置
– 決済情報の登録、変更
– 決済の履行
– 決済できない場合のアカウント停止
– 領収書の送付
– 決済履歴の表示
– プランの変更
– 解約
– 返金

細かい要素はまだあるもののこれらがあれば十分です。
一見、機能が多く実現が大変そうですが、Stripe Billing とそのうちの機能の Stripe Customer Portal を活用すればほぼ実装なしに実現できます。

## まず、Stripe Billingとは
よくある決済システムでは決済の手段と入金しかサポートして

元記事を表示

【Rails】(補足)フォロー機能を実装

# 概要
以下の参照記事にしたがって進めたら、フォロー機能を実装することができました。

実装方法の大半は参照記事に書かれているので、そちらをご覧いただければと思います。

本記事では補足内容を備忘録として記録いたします。

# 参照記事
↓以下の記事にお世話になりました。ありがとうございます。

– Railsでフォロー機能を作る方法
https://qiita.com/mitsumitsu1128/items/e41e2ff37f143db81897

# 完成イメージ
今回は、写真投稿アプリを題材に、フォロー機能を作成し、ユーザーページと写真詳細ページにフォローボタンを設置する方法を説明します。

– ユーザーページ
[![Image from Gyazo](https://i.gyazo.com/2028f80ce141a5fd3cd5397d930c0351.gif)](https://gyazo.com/2028f80ce141a5fd3cd5397d930c0351)

– 写真詳細ページ
[![Image from Gyazo](https://i.gyazo.

元記事を表示

自宅待機中に ModelSpec について学習した

新型コロナウィルスの影響で会社から自宅待機を命じられました。

いい機会と思い、ModelSpec について学習したことをまとめました。

### この記事で分かること
– バリデーションテストの考え方
– ModelSpec の基本的な記述の仕方

### この記事でやらないこと
– gem の導入手順
– ModelSpec の説明
– 必要なファイルの準備
– let を使用した変数定義
– FactoryBot や Faker を使用した記述

# 目次

1. 開発環境
2. テストする Model のバリデーション
3. RSpec の雛形を確認
4. context ブロックにテストする項目を書き出す
5. it ブロックに期待する結果を書く
6. it ブロックが叶うように、 context ブロックで御膳立てをする

# 1. 開発環境
“`
Rails 6.0.3.4

ruby 2.7.1

rspec-rails 4.0.1
“`

# 2. テストする Model のバリデーション

“`ruby:app/models/user.rb
val

元記事を表示

プログラミングを始めて1年半の駆け出しエンジニアがやって良かったこと・やっておけば良かったと思ったこと

## はじめに
[TechCommit Advent Calendar 2020](https://qiita.com/advent-calendar/2020/tech-commit)の23日目の記事です。

こんにちは、辻[(@tj_tsk)](https://twitter.com/tj_tsk)です。
現在はTechCommitの開発をお手伝いさせてもらっており、日々色々なことを学ばせてもらっています。(感謝 :pray:)

今回の記事では、私がプログラミングを学習し始めてから約1年半経ったので、振り返りを兼ねて「やって良かったこと・早めにやっておけば良かったこと」をまとめていこうかなと思います。

# 技術の学習に関して
私は主にRailsを使った開発ができるように学習してきました。
学習する内容や進める上でやってきて良かったことなどを以下にまとめてみました。

## フレームワーク以外の勉強をすること
私はプログラミングを学習し始めた当初、Progate(HTML,CSS,Ruby,Rails) → Railsチュートリアルという順序で学習していました。この学習順序自体

元記事を表示

Rails逆引き辞典(〜したいを叶える)

# 機能要件

[Rails]検索機能
https://qiita.com/shin1rok/items/779e581e9d12a92310c3

[Rails]画像検索 – 外部ライブラリ Ransack
https://qiita.com/LuckOfWise/items/e020e896e71d47d0c6a4

[Rails]文章投稿機能
https://railstutorial.jp/chapters/user_microposts?version=5.1#cha-user_microposts

[Rails]画像を投稿したい
外部ライブラリ – CarrierWave
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-basic_image_upload
→投稿した画像が大きくなる
https://railstutorial.jp/chapters/user_micropos

元記事を表示

Railsでのマイグレーションエラーを解決した1つの事例

今回はマイグレーションで失敗し、メンターに相談して、解決までのメモ書きです。
オンラインスクールの教材で、いいねをカウントするアプリのようなものを作っていました。
いいねをカウントするコードを入れてマイグレーションを実行したけれど、どうやらそこが上手くいってなかったようです。

## マイグレーションエラー発生
`rails db:migrate`を実行すると、

`An error has occurred, this and all later migrations canceled:PG::UndefinedColumn: ERROR: column “likes_count” of relation “posts” does not existLINE 1: UPDATE “posts” SET “likes_count” = $1 WHERE “posts”.”id” = $…
`
というエラーが出ました。

Google翻訳ですが、「post列にlikes_countが存在してませんよ!」と怒られているようでした。

## rails db:migrate:status

元記事を表示

【Rails6】ポートフォリオへのGoogleMapの導入

#はじめに

ポートフォリオ作成時によくWebサービスで見る、GoogleMapを導入してみたい!!と思い、実装したので、今回備忘録と復習のため記事を記述します。
内容は、表示ページに遷移すると、現在地の取得の有無が表示され、許可をすると、
現在地を表示することができ、検索フォームで検索したい場所を入力することで、その場所も表示できるような仕様です。

参考にさせていただいた記事は、[【Rails6 / Google Map API】初学者向け!Ruby on Railsで簡単にGoogle Map APIの導入する](https://qiita.com/nagaseToya/items/e49977efb686ed05eadb)
です!本当にありがとうございました。

#環境

Ruby on Rails ‘6.0.0’
Ruby ‘2.6.5’

#前提

– Google Cloud PlatformにてAPIキーを取得済み。
※GeocodingAPIとMaps JavaScript APIを選択。
※APIキーの取得方法については今回は割愛します。
– 私のポートフォリオでは

元記事を表示

エラー備忘録

# heorkuでデプロイしようとしたところエラーが発生した話。
ver. ‘rails’, ‘~> 6.0.0’

作成したappをデプロイしようとしたところ、Appliationエラーが発生してしまいました。
![errorimage](https://i.gyazo.com/1b702f09064ef68d8f27fb21aaa45fbc.png)

## 解決方法

*まず、画像にも表示のあるheroku logs–tailをターミナルでやってみる。
するとどこでエラーが発生しているのか教えてくれます。

いろいろ調べてみたら、credentials.yml.encファイルと対になってるはずのmaster.keyファイルがVScode上に存在していなかったんです。

その為、一度VScodeを終了し再起動したところ、うまくmaster.keyファイルが出現してくれたのでエラー解決することができました!

デプロイする前にまたこんなエラーが発生しない様に必要なファイルが存在しているか一度みてからやってみたいと思います。

### いろいろ調べて実行してみる際の注意
記事通りにコ

元記事を表示

画像アップロード

#画像アップロードツール
##ActiveStorage
ファイルアップロード機能を実装できるGem

##ImageMagick
コマンドラインから画像処理を行うことができるソフトウェア
画像作成、サイズ変更、保存形式の変更を行うことができる。
ソフトウェアであるImageMagicをRailsで扱うにはMiniMagicというGemが必要になる。

##MiniMagick
ImageMagicの機能をRubyで使用するためのGem

##ImageProcessing
画像サイズを調整する機能を追加するGem
ImageMagicだけではできない画像サイズ調整を追加する。

##ImageMagickのインストール
Homebrewからインストール
ターミナル

“`
% brew install imagemagick
“`

##MiniMagickとImageProcessingのインストール
Gemfile最下層に追記

“`ruby:Gemfile
gem ‘mini_magick’
gem ‘image_processing’, ‘~>1.2’
“`

ター

元記事を表示

OTHERカテゴリの最新記事