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

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

DockerでRailsアプリの開発環境構築【Docker, Rails, Puma, Nginx, MySQL】

こんにちは.
今回もRailsアプリの開発環境をDockerで構築する手順をまとめてみました.
前回はRails用とデータベース用の2つのコンテナを起動しましたが,今回は,WebサーバーとしてNginxのコンテナも起動してみました.

#事前準備
– [Docker-for-macのインストール](https://hub.docker.com/editions/community/docker-ce-desktop-mac)

#環境
Ruby: 2.5.8
Rails: 5.2.4.4
MySQL: 5.7.31
Nginx: 1.19.2
Docker: 19.03.12
Docker Compose: 1.26.2

#手順

###1. ディレクトリ,ファイルの作成

全体の構成は以下の通りです.
それではこの構成図の通り,ディレクトリとファイルを作成していきます.

“`:全体の構成
/test-app
├── Dockerfile
├── Dockerfile.nginx
├── docker-compose.yml
├── nginx.conf
├── Gemf

元記事を表示

【Rails】Gem gretelを用いたパンくずリスト作成

#そもそもパンくずリストとは
パンくずリストとは下記の写真のようにページを階層順に配列し、ユーザーが操作時に現在どの位置にいるかを可視化したリストです。このようなリストを位置型パンくずリストと呼びます。

![スクリーンショット 2020-10-12 17.09.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758940/94849bb1-ea4c-68a2-f925-caff5832daa0.png)

他にも属性型パンくずリストといいページを階層的に示したものでなく、そのページがどの種類のカテゴリに属しているかを示すリストもあります。属性型パンくずリストの例としてはECサイトが挙げられます。

パンくずリストを導入することによって主に下記の3点のメリットがあります。
・操作性の向上
→ユーザーがサイト内での位置情報を常に確認できる。

滞在時間の向上
→パンくずリストにより階層毎の移動が容易になり回遊性が高まる。

SEO効果
→パンくずリストによりクローラーの巡回をサポートする。

元記事を表示

【rails】バリデーションとは

#バリデーションとは?
オブジェクトがDBに保存される前に、そのデータが正しいかどうか検証する仕組みをバリデーションと呼ぶ。
例えば、メールアドレスを入力して欲しい場合、メールアドレス以外が入ったものが送られた時、DBに保存しないようにする。

使い方の構文
validates :指定した属性またはオブジェクトorカラム名, バリデーションヘルパー:


“`
validates :title, presence: true
“`

“`
validates :category, acceptance: true
“`

“`
validates :title, length: { minimum: 1 } # 「1文字以上」
validates :title, length: { maximum: 75 } # 「75文字以下」
validates :title, length: { in: 1..75 } # 「1文字以上75文字以下」
validates :password, length: { is: 8 }

元記事を表示

【rails】mapメソッドの使い方

mapメソッドについて学習したのでアウトプットいたします。

この記事を読むとmapメソッドの使い方がわかります。

#mapメソッドとは?
「配列の中身を1つずつ取り出してブロックという構文を繰り返し実行する。
そして、ブロックの返り値を集め、新たな新しい配列を作る」

これから詳しく解説します。

例えば、100円、200円、300円の商品があり、全ての商品に税金をかけたいとします。

“`
items_price = [100, 200, 300] #3つの価格の配列
tax = 1.1
items_add_tax = items_price.map{|item_price| item_price * tax}
#配列中身の値を一つずつ取り出し、✖️1.1をしていく
put items_add_tax
=> [110, 220, 330]
#税金が加わった新たな配列ができる
“`

#まとめ
mapメソッドの使い方
“`
配列オブジェクト.map {|ele| ブロックの処理}
# eleには配列の要素が1つずつ代入される
# ブロックの処理は配列の要素の数だけ

元記事を表示

【rails】gem 「devise」の使い方

今回は一番railsを利用しているとよく見かける「devise」というgemについて学習したため、
アウトプットいたします。

わかる内容としては
● そもそもdeviseとは?
● deviseの使い方とは?

です。

#deviseとは?

railsで作ったウェブアプリケーションに、簡単にログイン、ログアウト機能を追加するgemです。
deviseはgemの中で一番使用されており、工数がかかるログイン機能の実装を簡素化してくれます。

ではどのようにdeviseを使っていけばいいでしょうか?

#deviseの使い方

1、 gem install
まずはgemをインストール。gemfileにdeviseを記述しましょう

“`
gem ‘devise’
“`

2, rails g devise:install
deviseの設定ファイルをrailsにインストールするのがこのコマンドです。

3, rails g devise:views
deviseのファイル(サインアップ、ログイン等)を作成します。

4, railsでログイン機能を実装したいモデルを作成する
de

元記事を表示

【rails】バリデーション(validation)の使い方

バリデーションについて学習いたしましたので、
アウトプットとして、バリデーションの特徴と使い方を紹介いたします。

#validationとは?

バリデーションとは、
「入力フォームを通じてビューからサーバー側へパラメーターが送られてきた際、正常な値か検証する機能」です。

主な使用例としては、フォームの中身があるかないかを検証し、
ない場合はエラーを表示します。

例えば、userの電話番号の入力を必須にする場合。

“`
validates :e-mail, presence: true
“`

こうすることで、e-mailが入力されていない場合、エラーを表示することができます。

元記事を表示

【rails】authenticate_user!の使い方

authenticate_user!について学習したため、アウトプットいたします。

authenticate_user!とは?
どうやってauthenticate_user!を使うのか理解できます。

#authenticate_user!とは?
主に2つ理解する必要があります。

・deviseのメソッドである
・ユーザがログインしているかどうかを確認し、ログインしていない場合はユーザをログインページにリダイレクトする。

ではどうやって使うのでしょうか?

#authenticate_user!の使い方の一例
“`
before_action :authenticate_user!, only: [:show, :index]
“`

基本的にはbefore_actionと一緒に使います。

上記のコードの意味としては、
全てのアクションの前に、ユーザーがログインしているかどうか確認する!
ただし、showアクションと、indexアクションが呼び出された場合は、除くよ。という意味になります。

基本的にindexアクションや、showアクションはログインされていなくてもみ

元記事を表示

【Rails】 あいまい検索機能の付け方

経緯

現在絶賛作成中のポートフォリオで、フリマアプリのラクマの仕上げに検索機能をの実装したいと思い作成。さほど難しくはなかったけれども、色々記載しておこうと思います。

環境

ruby 2.6.5
Rails 6.0.3.2
haml使用

イメージ図

ファイル名

ファイル名

手順

1、ルーティングの設定
2、検索フォームを作成
3、モデルに定義
4、コントローラーに設定
5、ビューの作成

の5つの手順になります。
簡単なので、サックと出来ると思います。

ルーティングの設定

今回は、7つの基本アクション以外のアクションを定義します。
7つの基本アクションとは、`index` `new` `create` 等のア

元記事を表示

【超初心者向け】autofocus: trueの使用法

# autofocus属性
「autofocus: true」とはページを読み込んだらすぐにautofocus属性を記述している部分にカーソルが移動して入力状態になる、というものです。
# 具体例
一覧ページからマイページへ移動し名前を変更しようとする場合。
 
一覧ページからマイページボタンをクリックしてマイページに行くと自ら名前のフォーム部分を選択しなくてもカーソルが移動した状態でマイページが表示されます。そのためすぐに編集をすることができます!
![カーソルが移動して入力状態になる](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764198/67109899-be13-7402-3fcf-105416cff1fe.png)
***
⚠️autofocus:trueは1つのhtmlファイルに1つまでということを押さえておきましょう。
# 記述の仕方
ここでは上記画像のコードをそのままご紹介します。
全体の中で「autofocus: ture」がどのように使用されているのかを把握しましょう。
環境:rail

元記事を表示

RailsでCSVインポートする時、nkfコマンドを使ったらめっちゃ楽だった

RailsでCSVファイルをインポートするとき、こんな感じに実装してた。

“`ruby
def read_csv
begin
rows = CSV.read(file, encoding: ‘UTF-8’)
rescue CSV::MalformedCSVError
begin
# csvファイルがUTF-8でない場合はShift_JISで読む
rows = CSV.read(file, encoding: ‘Shift_JIS’)
rescue CSV::MalformedCSVError, Encoding::InvalidByteSequenceError, Encoding::UndefinedConversionError
# csvファイルがUTF-8・Shift_JISでもない場合
@error = ‘ファイルのエンコードはUTF-8かShift_JISではありません。’
end
end
rows&.shift # ヘッダーを削除する
rows
end
“`

元記事を表示

今回使ったlink_toのいろいろ、まとめてみた

#はじめに
今回のカリキュラムで一番躓いたのが、`link_toメソッド`だった。もちろん基本的な使い方は理解しているつもりだが、どうもpathの引数がしっくりときていない。

今回の投稿は何かを説明する目的ではなく、自分がコードを読むための記録である。
以下、今回作成したアプリの全link_toを余計な記述はカットして引数の読み方とともに載せる。

###全link_toメソッド

#####①

“`ruby:application.html.erb

<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<%= link_to "新規投稿", new_prototype_path %>
“`
サインイン状態で表示させている「ログアウト」と「新規投稿」どちらも誰もが共通するページや処理のため、( )で引数を渡す必要がない。
ユーザーによってログアウトページが違うことはないし、ユーザーによって新規投稿ページが違うことはない。
`link_toメソッド`はデフォルトでHTTPメソッドがGETのため、ログ

元記事を表示

[Rails]Rspecを使ったテストコード

#はじめに
Rspecを導入し、テストコードを書いてみようと思います。
コマンドはdocker環境のコマンドを使う。

#Gemの導入

“`
group :development, :test do
gem ‘rspec-rails’
gem ‘factory_bot_rails’
gem ‘faker’, “~> 2.8”
end
“`

`docker-compose run web bundle install`
`docker-compose build `
インストール完了。

#Rspecの設定

`docker-compose run webrails g rspec:install`
上記コマンドを行うと、下記ファイルが生成される。

“`
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
“`

“`
.rspc
–format documentation
“`

#コード作成

“`spec/models/user_s

元記事を表示

クラウドIDE:Ruby on RailsチュートリアルでHerokuがインストールできなかった件

Ruby on Railsのチュートリアルで、Herokuをインストールしようとしたら、以下のエラーが出て進まなかった件。
調べても何が悪いのかよくわからなかった(゚∀゚)。
`bash: /home/ec2-user/.profile: Permission denied`

実行コマンドはチュートリアルに記載してあった下記の通り。
`source <(curl -sL https://cdn.learnenough.com/heroku_install)` ## 環境 ・AWS,Cloud9の統合環境(クラウド統合環境) ## 対処 解決方法をググっても特に見つからなかった\(^o^)/。 Heroku CLIをインストールするらしいので、Heroku CLIのインストール方法を確認した。 書いてあるコマンドで、チュートリアル以外のコマンドでインストールできないか調べた。 https://devcenter.heroku.com/articles/heroku-cli 下の方にnpmコマンドを使ってもインストールできることが書いてある。 インストールの注意文を見ると、「n

元記事を表示

【Rails6】主なGemについて

#はじめに
 Railsを使うにあたり、当たり前のように“puma“とか“webpacker“とか“listen“を使用していますが、正直あまり意味がわからずに使っていました。ここいらで主なGemについてまとめたいと思います。

#Railsデフォルトの主なGem

 下記がRails6で生成されるデフォルトGemです。

““ruby:Gemfile
# Bundle edge Rails instead: gem ‘rails’, github: ‘rails/rails’
gem ‘rails’, ‘~> 6.0.3’
# Use sqlite3 as the database for Active Record
gem ‘sqlite3’, ‘~> 1.4’
# Use Puma as the app server
gem ‘puma’, ‘~> 4.1’
# Use SCSS for stylesheets
gem ‘sass-rails’, ‘>= 6’
# Transpile app-like JavaScript. Read more: https://

元記事を表示

動画を挿入する方法

#トップページなどに動画を挿入する方法
##GIF
###https://gyazo.com/3015a8b1f689153dcfe7fcb308d483bb
![6582025a04cb61be20a4cabc8a556419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/725167/cc8863f2-143e-204e-5af2-292b13d9de8e.png)

#下記コード
“`java:index.html

Brilliant Blue

“`
“`java:css
.bg-video-wrap {
position: relative;
}
p {
font-family: serif;
color: #fff;
font-size

元記事を表示

削除されずに宙ぶらりんになったファイルがないか確認する

Active Storageを使ってアップロードファイルの管理をしていると、管理するテーブル (`active_storage_blobs` , `active_storage_attachments`) とストレージに実際に保存されているファイル (実体ファイル) との間に、何らかの理由で不整合が起きることがある。

中でも `active_storage_attachments` だけが削除され、それに紐づく `active_storage_blobs` と実体ファイルが残ってしまっている場合には、 `ActiveStorage::Blob.unattached` というスコープが使える。

“`zsh
❯ rails c
Loading development environment (Rails 5.2.4.4)
[1] pry(main)> ActiveStorage::Blob.unattached
ActiveStorage::Blob Load (1.0ms) SELECT “active_storage_blobs”.* FROM “active_stora

元記事を表示

ターミナルって何?

#ターミナル説明
**ターミナルは、PCに命令をすることができるツールですね。
環境構築を実行するには コマンドラインというツールが必要となります。
Macにデフォルトでインストールされているコマンドラインがターミナルです。**

#コマンドライン説明
**コマンドライン(または コマンドラインインタフェース:CLI )とは、コンピュータに対してキーボードからコマンドという文字を打ち込んで操作を行うツールになります。**

#GUI(グラフィカルユーザインターフェース)
**コマンドラインとは対照的に、グラフィックを用いて操作を行う仕組みを グラフィカルユーザインタフェース(GUI) と言います。**

例えば、「マウスでファイルをダブルクリックして開く」という操作など、普段PCで行う操作のほとんどはGUIで行なっていることが多いです。

![基本.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762918/f4063404-13d5-5ce7-6c67-b1a933fa7ac9.png)

#ター

元記事を表示

マイグレーションファイルから Model を直接触るのはやめて欲しい

## 何が起こったのか
開発環境で新たにDBを作成。

お約束通り、

“`
$ rails db:create
$ rails db:migrate
“`

大量のマイグレーションファイルを一気に migrate しようとしたその時、事件は起こった。

“`
PG undefined column hogehoge …
“`
的な感じで、スッと通らない?
嫌な予感がする。

なになに。。。。

マイグレーションファイルから直接 Model にアクセスしていたんです。

“`ruby:migartion_file

Hoge.delete_all


“`

みたいな感じでモデルに対して直接操作を行う処理が書かれていた?

そのマイグレーションファイルは過去のものであり、その当時はそのモデルがあったのだろうが、今現在のソースコードには存在しない。
当然、 `そんなモデルは無いよ` と怒られたりする。

こんな感じで直接 Model に対して処理を行っているマイグレーションファイルが散見された。
結果 migrate を通すのにものすごく苦労し、過去のマイ

元記事を表示

deviseのコントローラー初期状態まとめ

deviseのコントローラーの初期状態が気になったことがあり、一度サンプルを作る羽目になったのでメモとしてQIITAに残しとく。

“`ruby:confirmations_controller.rb
class Sample::ConfirmationsController < Devise::ConfirmationsController # GET /resource/confirmation/new # def new # super # end # POST /resource/confirmation # def create # super # end # GET /resource/confirmation?confirmation_token=abcdef # def show # super # end # protected # The path used after resending confirmation instructions. # def after_resending

元記事を表示

Ruby on Rails 教わった事 その2

この記事の目的

プログラミングスクールで私が約3ヶ月で教わった事を転職活動に生かすためにまとめました。
私による私のためだけの記事です。

この講義で印象に残った一言は、
RSpecは絶対に身に付けなければいけない必須の技術。

Hamlで書く

Hamlを使うと閉じタグがいらなくなり、コードを減らせる。
Hamlの書き方

モデルメソッド

何回も使うロジックはモデルメソッドにする、DRYにする↓

“`example.html.haml

– – if current_user.id == post.user_id #直書き
+ – post.created_user?(current_user)
%p あなたは投稿した人です
“`

“`post.rb

def created_user?(user)
self.user_id == user.id

元記事を表示

OTHERカテゴリの最新記事