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

Rails関連のことを調べてみた2020年03月10日
目次

deviseとActive Storage を使ってavatar(アイコン)登録する

## Active Storageの場合 (Rails 5.2以降の場合)

アクティブストレージは保存場所を信頼性の高いamazon, google, microsoftが提供するクラウドに保存できる。またバックアップもできるので、データが消えた場合などに非常に重宝されます。

設定方法も非常に簡単です。

[概要](https://railsguides.jp/active_storage_overview.html)
[Active StorageによるRails ファイルアップロード](https://qiita.com/ebi_ebi/items/260be781987284bf3866)
[Active Strageを使用してユーザーのアバターを登録、表示する](https://re-engines.com/2018/03/12/active-strage%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E3%82%A2%E3%83%90%E3

元記事を表示

シンボルとは

# シンボルとは

Symbol とは、Ruby が内部でメソッド名などの識別に使っている数値で、任意の文字列に対して異なった値が割り当てらる。

なるほど、よく分かりませんね。

つまり、文字列だけど数値。みたいなものです。ハッシュのキーや文字列自体がデータでは無い物に使うことが吉です。

# 前コロンと後コロンの違い

シンボルとは主に文字列にコロン記号「:」を前置して定義したものです。

それにより、文字列を””で囲む必要がなくなります。

コロン記号「:」が、文字列記号「””」の代わりに、「これはシンボルだよ」とRubyに知らせています。

上記のように、コロン記号「:」を文字列に前置するとシンボルになります。

たとえば、ハッシュのキーとしてシンボルを使う際や、キーワード引数を使う際に、コロン記号「:」を後置します。

# シンボルはオブジェクトの一つ

メソッドなどの名前を識別するためのラベルをオブジェクト化

“` ruby
samurai /*文字列
:samurai /*シンボル

“`

# ハッシュのキーとして利用する
よく使われるのが、ハッシュのキー

元記事を表示

Railsで作ったアプリをAWSでデプロイ① 〜アカウント作成編〜

こんにちは
AWSをつかってRailsアプリをデプロイしたいと思います

まず、AWSアカウントを作成します
スクリーンショット 2020-03-09 14.16.07.png

注意点として一度使ったメールアドレスは、削除すると二度と使えなくなるそうです。

次の画面、僕はパーソナルです。

スクリーンショット 2020-03-09 14.20.47.png

この後、クレジットカード→本人認証画面なので割愛します
プランはベーシックで

元記事を表示

DB接続がない状態でassets:precompileを行う

本番とは違う環境だったり、Dockerfile内でassets:precompileを行ったりするときにDB接続でエラーになるときがある。これを回避する方法ってあるのかなと思ったので調べてみた

## activerecord-nulldb-adapterを使う

github
https://github.com/nulldb/nulldb

“`Gemfile
gem ‘activerecord-nulldb-adapter’
“`

“`config/database.yml
default: &default
adapter: <%= ENV['DB_ADAPTER'] ||= "mysql2" %>
“`

database.ymlに環境変数で`DB_ADAPTER`を指定する。

“`
$ DB_ADAPTER=nulldb bundle exec rake assets:precompile
“`

上記を実行すればDB接続なしでprecompileできる

## 参考

Rails × ECS でオートスケーリング&検証環境の自動構築
https

元記事を表示

AWS ECSのビルド〜デプロイをCodePipelineで自動化した

Docker + ECS + RailsのプロジェクトでCodePipelineを使用してデプロイまでを自動化したので、その知見をまとめたい。(ブルーグリーンデプロイではなく、通常のデプロイ時の方法)

RailsのプロジェクトだけれどCodePipeline基本的な使い方は、他の言語でもそれほど変わらないと思う

## デプロイの流れ

githubにpushすれば自動でデプロイが開始される。デプロイは以下の流れで行うように作った。

1. GitHubの特定のブランチ(masterなど)にpushする
1. pushされたことがCodepipelineに通知されビルドが開始
1. docker-composeを利用して、Dockerをbuildする
2. Dockerイメージタグにコミット番号を付与して一意にする
2. ビルドが完了したらECRにpushする
1. ビルド完了後にECSにデプロイ通知がいく

## CodePipelineの設定

CodePipelineはソース管理、ビルド、デプロイをパーツのようにつなげてCD/CIを管理することがで

元記事を表示

【Ruby on Rails】フォームオブジェクトを使って検索キーワードをcontrollerに送る

## 想定対象者

– Ruby on Railsで検索フォームを独自で作りたい
– ransackを使いたくない
– Google Books APIを使ったポートフォリオを作りたい(本記事ではあんまり関係ないけど)

## (個人的に)実現したいこと
Google Books APIでは以下URLにキーワードを入れるだけで検索結果を返してくれるという仕様があります。
https://www.googleapis.com/books/v1/volumes?q=(ここにキーワード)

これを使えば、最終的に以下のようなViewの実装が思い浮かびます。
(ただし、この解説は別記事で予定)

“`ruby:books_controller.rb
@books = 処理(keyword)
>> [book1, book2, book3, ….]
“`

“`slim:search.html.slim
= @books.each do |book|
= image_tag book.image
= book.titile
= book.author
= (略)
“`

元記事を表示

【Ruby on Rails】Google Books APIを叩く際の5つのTips

## 想定読者
– Railsで読書系ポートフォリオを作っている方

“`
$ ruby -v
ruby 2.6.5
$ rails -v
Rails 5.2.4.1
“`

## その1.APIを叩くロジックはcontrollerから切り分ける

まず以下記事(私の前記事です)のようにAPIを叩くわけですが、これをcontrollerに書いたらあっという間にFat controllerになりました。
[Ruby on RailsでGoogle Books APIを叩く](https://qiita.com/kumackey/items/cd12c02662fb43948f9e)

APIを叩くロジックは、以下を参考にmodlueとしてapp/libに置きました。
[Rails 5 で自作のモジュールを読み込む方法](https://obel.hatenablog.jp/entry/20170614/1497412171)

#### APIを叩く自作module

“`Ruby:app/lib/google_books_api.rb

元記事を表示

コーディング未経験のPO/PdMのためのRails on Dockerハンズオン vol.10 – TDD & Test Automation –

# はじめに
記念すべき第10回目(ドドーン)。

前回まででサインアップ、サインインの機能を作っていきました。
ただどんどんアプリケーションを作っていくうちに、テスト、面倒になってきましたね。デグレも気になるし…

ということで今回は少しアプリ開発を離れまして、TDD(Test Driven Development)、そしてテスト自動化を体得していきましょう!

# 前回のソースコード
前回のソースコードはこちらに格納してます。今回のハンズオンからやりたい場合はこちらからダウンロードしてください。

– [at946/rails_on_docker_handson at vol.09](https://github.com/at946/rails_on_docker_handson/tree/vol.09)

# TDD
まずはTDDをご紹介。
特にアジャイル開発をやったりすると耳にする単語ですよね。
Test Driven Development、日本語だとテスト駆動開発です。
なんちゃら駆動開発って色々あるんですが、まぁ『なんちゃら』部分を第1に考えた開発って感じで、TDDの

元記事を表示

ユーザーの名前検索フォームの作成[namespace]

#ユーザーを名前で検索する
検索フォームに入力した文字を含む名前をもつユーザーのみを一覧で表示します。
なお、検索フォームに文字が入力されていない場合は全ユーザを表示します。
検索のため、新しくアクションを定義してコントローラーで使用する方法もあります。ですが、可読性やMVCの観点から、Railsの開発はできる限り7つのアクションを利用して開発する方が推奨されている書き方であるため、今回はnamespaceを使用し専用のコントローラを作成する方法で実装します。
以下を使用しています。

– ruby 2.5.1
– rails 5.2.4.1

###namespce(名前空間)
名前の集合を分割すること、または、分割するために付けられる識別名をnamespaceと呼びます。namespaceを用いることで、同様のクラス名を名付けたクラスであってもそれらを区別することができます。

今回の場合、usersディレクトリの配下にsearches_controller.rbを作成し、users::という名前空間が付けられるため、直感的に「ユーザーを検索するコントローラー」ということがわかりま

元記事を表示

【Rails】will_paginate導入方法とつまづきがちな点(Railsチュートリアルと比較して)

#はじめに
Railsチュートリアル通り進めると色々なつまづきポイントがあるなと思ったので記事にします。

#will_paginate導入方法(Railsチュートリアル)
[Railsチュートリアル](https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#cha-updating_showing_and_deleting_users)での導入方法は基本的に下記のとおりです。
####①必要な`gem`をインストール

“`
gem ‘will_paginate’, ‘3.1.6’
gem ‘bootstrap-will_paginate’, ‘1.0.0’
“`

####②ページネーションしたいビューに記載

“`erb
<%= will_paginate %>

    <%= render @users %>

<%= will_paginate %>

“`

####③コントローラーに記載

“`ruby

元記事を表示

【Rails】seed-fu で user の seed を作りたい

# seed-fu を導入してみた
seed-fu はデフォルトの seeds.rb よりも seed を扱いやすいということを聞いて、試しに自分のアプリケーションに入れてみることにしました。
seeds.rb を使っている場合、同じ操作をしようとすると、データを一度削除してから再度追加する必要があリます。一方で seed-fu なら、**seed データの変更をしても`rails db:seed_fu`だけで変更が反映される**という点が便利です。

導入は

“`:Gemfile
gem ‘seed-fu’
“`

として、`bundle install`するだけです。

# よくある作り方
user の seed を作る時を考えてみます。user は email がユニークなモデルです。
まずは[公式の README ](https://github.com/mbleigh/seed-fu)を読んで次のように書いてみました。

“`db/fixtures/01_user.rb
User.seed do |s|
s.id = 1
s.name = “foo”

元記事を表示

Dockerで既存アプリの開発環境を作成【Ruby2.6 + Rails5.2 + Mysql5.7】

既存アプリの開発環境をDockerに。色々とハマりましたが、そこも含めて書いて行きます。

##環境
Ruby:2.6.5
Rails:5.2.4
Mysql:5.7
OS: macOS Mojave 10.14.5

##ディレクトリ構成
“`
sampleApp —- Dockerfile
|– docker-compose.yml
|– app
|– bin
|– config
|– database.yml
“`

既存アプリのルート直下に`Dockerfile`、`docker-compose.yml`を作成しました。

##うまくいったやり方
“`Dockerfile:Dockerfile
# app_nameの部分はそのままでOK
FROM ruby:2.6.5

RUN apt-get update -qq && \
apt-get install -y build-essential \

元記事を表示

【Rails】独自ヘルパー(Helper)メソッドの使い方

#ヘルパーとは
`helper`(ヘルパー)を一言で表すと、
__「処理を別ファイルに分離し、viewをよりシンプルにDRYに書くためのモジュール」__
です。
(view以外もhelpできますが、基本的にはviewをhelpしてくれるものだと捉えましょう)

_※`DRY(Don’t Repeat Yourself)原則`とは
「同じコードを重複させない」という意味だけでなく、「1カ所の修正で済むのであれば、できる限りそうなるようにプログラムを作るべき」という意味をもつ原則です。_

Railsには、もともと用意されているhelper
→`link_to`、`form_with`、`image_tag` などが存在しますが、

今回は、それとは別に独自ヘルパーについて説明します。

#独自ヘルパーの活用方法

ヘルパーモジュールは、`app/helpers`配下にあります。
ファイルの使い分けとして、

・`application_helper.rb`は、
アプリケーション全体にわたって使うヘルパーメソッドを定義
・`xxx_helper.rb`は、
その”xxx”だけで使うヘルパー

元記事を表示

[rails] [初学者向け]docker環境でbinding.pryを使ってデバックする方法

# 概要
今更ながらデバックを手助けてくれる
「**binding.pry**」さんを知り、実際にデバックしてみました。
私がrails初学者ということもあり、
導入出来ても、デバックの仕方が分からず思ったより時間がかかりました。

### 目的
1. **手順別に分かりやすく説明**
2. **デバック方法まで記述**
3. **メモ代わり**

# 環境
rails:5.2.3
ruby:2.5.6p201

# binding.pryの導入
“`Gemfile.
group :development, :test do
gem ‘pry-rails’
gem ‘pry-byebug’
end
“`
※gemfileに記述後、**bundle installを忘れずに!**

# docker-compose.ymlの書き換え
“`docker-compose.yml
web:
tty: true
stdin_open: true
“`
これでコンテナ内の標準入出力をローカルマシンのターミナルにアタッチしてくれるらしいです。

ここまでbinding.pry

元記事を表示

ローカルでRails sした際にA server is already runningと出た際の対処方法

#lsof -i:3000 とコマンドにうち、kill -9 (pid番号)で動いているpidを削除

自分のメモ用としてここに記述します。

Rails sすると

“`
A server is already running
“`

と表示されて、既にサーバーは動いていますと表示されてしまった・・・。
サイトが更新されないのに、サーバーが既に動いていると表示されている。

#解決方法

“`
lsof -i:3000
“`
とターミナルにうつ

②表示されているpid番号を

“`
kill -9 (pid番号)
“`

でpidを削除する。


Rails sし、サーバーを起動する

#参考にさせていただいたサイト様
https://www.techry.net/blogs/451

以上となります。
間違っている、ここはこうしたほうが良い等ございましたらご指摘いただけますと幸いです。

元記事を表示

ActionMailerの件名に自前でprefixをつける

## 前提
Emailを送信するときの件名に 「[サービス名]新規登録が完了しました」 のように共通のprefixを付けていました。
そのために [email_prefixer](https://github.com/wireframe/email_prefixer) というgemを使っていたんですがメンテナンスが止まっておりgemのコードが原因のwarningに対処した話です。

“`
DEPRECATION WARNING: `Module#parent` has
been renamed to `module_parent`.
`parent` is deprecated and will be removed in Rails 6.1.
“`

## コード

“`app/mailers/applicatin_mailer.rb
class ApplicationMailer < ActionMailer::Base ..省略.. after_action :append_prefix private def append_prefix

元記事を表示

Rails モデルのscope処理でコードを見やすくしよう

# 今日の目標 
RailsにおけるモデルのScope機能を学ぶ
ファットコントローラにならないようにモデルの定義を考える

## モデルのscope機能とは?

モデルのスコープ機能(scope)とは、モデル側であらかじめ特定の条件式に対して名前をつけて定義し、その名前でメソッドの様に条件式を呼び出すことが出来る仕組みのこと。

基本構文

“`ruby:
class モデル名 < ApplicationRecord scope :スコープの名前, -> { 条件式 }
end
“`

例えば 下記のようなインスタンス変数があったとします。

“`Ruby:controller
def index

@ladies = Product.where(category_id: “1”)
@men = Product.where(category_id: “2”)
@home_appliances = Product.where(category_id: “8”)
@hobbies = Product.where(category_id: “6”)

end
“`

元記事を表示

【Ruby on Rails】部分テンプレート(js.erb)を用いた非同期通信について(基礎/開発)

# 最初に
自身で学習してきた内容を書き出していきます。
基本的には自分自身でわかるような内容になりますので、ご容赦ください。
また、誤っている点がありましたら、コメントにてご指摘ください。

(要確認)マークがあるものは、「実行前に必ずググる」べき内容。

# 本記事の注意点
こちらでは、いいね機能とコメント機能の非同期通信化のメモが書いてありますが、
**いいね機能とコメント機能の実装部分は記述しておりません**
飽く迄、個人的なメモ書きであり、「非同期通信」について記述しております。
ご容赦ください。

# index
– そもそも非同期通信とは
– Ajaxとは
– renderとredirect_toの違い
– 記述例

# そもそも非同期通信とは
大雑把に表現すると、**「画像の遷移のない通信」**のこと。
つまりは、同期処理は一瞬画面が白くなって、画面を切り替わることである。

# Ajaxとは
「Asynchronous JavaScript + XML」の略称。(Asynchronous:非同期)
JavaScriptの非同期通信を使って、Webサーバ

元記事を表示

[JS][Rails]プレビュー付き画像アップロードで画像枚数に制限をかけよう!!

## 枚数制限の記事無くない?
複数画像アップロード方法は過去の記事で記載しているのですが(良かったら見てください。[こちら](https://qiita.com/tomoyaueno29/items/6c35e6859829f369215c))、例えば画像を複数選択したいけど、5枚までしか登録できない様にしたいんだよなー…という時ないですか?
私も色々記事をあさったのですが中々良い記事が見つかりませんでした。めちゃくちゃ需要ありそうやのに。
なので、今回その方法をお伝えします!!
あくまで一個人の方法なのでもっと良い方法があれば教えてください!!

##完成品
[![Image from Gyazo](https://i.gyazo.com/c567cbdab0b2d594b768dbd0e38a56e3.gif)](https://gyazo.com/c567cbdab0b2d594b768dbd0e38a56e3)

##HTMLの用意

スクリーンショット 2020-03-09 14.42.39.png7つのアクションのみによる検索機能

##7つのアクションのみで検索機能を実装
今回はモデル名をTweet、Comment、Userとします。
【例】今回はtweetsのindexアクションに記述します。

“`app/views/tweets/index.html.erb
<%= form_with(url: search_tweets_path, local: true, method: :get, class: "XXXX") do |form| %>
<%= form.text_field :keyword, placeholder: "投稿を検索する", class: "YYYY" %>
<%= form.submit "検索", class: "ZZZZ" %>
<% end %>
〜省略〜
“`
##ディレクトリ::searchesコントローラーを作成
searches_controller.rbは、ユーザーを検索するのか投稿を検索するのか明示されていないため分からなくなります。区別できるように今回はtweetsディレクトリを用意し、そこにsearches_controller.rbを作成します。

元記事を表示

OTHERカテゴリの最新記事