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

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

[Rails]カラムを絞るだけの目的でselectメソッドは使うな!

# ActiveRecordのselectメソッドについて

ActiveRecordでデータを取得すると基本的に該当するテーブルのすべての項目が取得されます。
発行するSQLを見ていただくと分かる通り、*で全項目取得しています。
全項目取得しているので、以降の処理ではどの項目でも参照することができます。

“`pry
pry(main)> user = User.first
User Load (0.7ms) SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1
=> #
pry(main)> user.id
=> 1
pry(main)> user.name
=> “ham”
“`

ただ、全カラム使うわけではないので必要なカラムだけ取得したほうがいいのでは?という考え方もあると思います。
そんなときにselec

元記事を表示

Herokuへのデプロイ(2回目以降の編集用)

# この記事でわかること
①Herokuでapp作成し、後にローカルで編集した変更点をデプロイする方法。

:thinking:初めてappを作成する人用ではないので注意!

### 前提として
ディレクトリは作成中のappに移動した状態。
アプリはRailsで作成しています。
  
  
  
  
:hugging:ではここから初めて行きます:hugging:

# コマンドの流れ

①Gemfileを変更したり追加したりしている場合バンドルインストール。
私はとにかく行っておきます。

“`
% bundle install
“`
  
  
②変更のコミット

“`
% git add .
% git commit -m “Add pg gem for Heroku”
“`
  
  
③リポジトリのプッシュをしてアプリのデプロイをする。

“`
% git push heroku master
“`
  
  
④DBマイグレーションする。
本番環境Heroku用の作業だと思っている。

“`
% he

元記事を表示

【Rails】password_digestを生成する方法

## password_digestについて
Railsでパスワードを保存する際にpassword_digestを使用することが多いと思います。[Rails のモデル(フォーム)でパスワードを暗号化して保存する方法](https://qiita.com/ryosuketter/items/805452b7e6bf9637cb57)にある通り、パスワードを設定するときは、モデルを通してパスワードを設定すればpassword_digestを生成してくれる仕組みになっています。

## やりたいこと
新規にユーザを作成するときはよいのですが、パスワードを更新するときに一度ユーザを取得した後に更新と言う手順が、モデルを通すと必要になります。これをユーザを取得せずにupdateだけ行いたい場合、password_digestを別途取得する必要があります。今回はその取得方法を紹介します。

## 対応方法
[How to update user password using password_digest and form in Rails](https://stackoverflow.com/

元記事を表示

herokuデプロイ中precompiling assets failedとエラーが出た時

ローカル環境では問題なく動いていたのにherokuでデプロイ中に**precompiling assets failed**とエラーが出たので解決方法をまとめます。

logを調べているうちに環境内に問題がありそうだったので
ターミナルでエラー解析をします。

“`

RAILS_ENV=development bin/rails assets:precompile
“`

こちらを実行することで開発環境ないでエラーがないかを確認することができます。

中身を見てみると、、、

“`

warning Integrity check: Flags don’t match
error Integrity check failed
error Found 1 errors.

========

元記事を表示

Railsでワクワク個人開発  第3回:データの関連付け/ seedデータ投入

# 関連付けとモデル

 日々の記憶がおぼろげだが、ここに記しておこう。関連づけられたデータを作成してみることにした。DB設計の段階から、ユーザーと彼らがもつ植物は関連付けようと考えていた。一人のUserは複数のPlantを所持する。共有することはしない。

 Userモデルはさきの記事でmigrateした。今回はPlantモデルをつくる。
`rails g model plant ` をターミナルに打ち込むとplantができる。便利だ。 `db/migrate`フォルダから対応するファイルを開く。こんな感じで書く。

“`ruby
class CreatePlants < ActiveRecord::Migration[6.0] def change create_table :plants do |t| t.integer :user_id, null: false t.string :plant_name, null: false t.string :img t.timestamps end end end

元記事を表示

Railsでactive_hashを使って都道府県などのセレクトボックスを作る

# はじめに
・某プログラミングスクールのチーム開発で学んだ知識の備忘録として書きます。
・商品がどの都道府県から発送されるのか、という情報のために使用しました。
・間違いなどあれば指摘いただけますと幸いです。

# active_hashって何?
・`ハッシュデータとして定義したデータを、擬似的にActiveRecordのように扱う`ことができるのが`active_hash`というgem。
・都道府県など、`項目数がほぼ変わらない静的データ`はテーブルにせず、active_hashを使うと便利。
・ActiveRecord <=> ActiveHashの`リレーションを張ることができる`。

# 使い方
順を追って書いていきます。

“`ruby:Gemfile
# ファイルの一番下に記述追加。haml記法で記述するのでhaml-railsも入れます
gem ‘active_hash’
gem ‘haml-rails’
“`
“`terminal:ターミナル
$ bundle install
“`
これでactive_hashがインストールされました。
ミニアプリを作ってみま

元記事を表示

【パス指定】ネストしたリソースのパス指定

# 概要
ネストしたリソースのパス指定方法について、一瞬戸惑ってしまったので備忘録として記録します。

# 環境
・ruby ‘2.5.7’
・rails ‘5.2.3’
・rspec-rails ‘4.0.0.beta2’

# 指定方法

**結論:** `rails routes`してルーティングを一覧表示して確認する!

####(例) Rspecのリクエストテストでパス指定をする
次のような、ルーティングを宣言していたとします。

“`routes.rb
resources :datespots do
resources :comments, only: [:create, :destroy]
end
“`

ターミナルで`rails routes`すると、ルーティングが一覧表示される。

“`
Prefix Verb URI Pattern Control

元記事を表示

【CSS】flex box画像の改行がしたい

画像付きボックスの改行ができなくて沼ったのでメモ。冷静に調べたらもっと早く解決できたと思いますが自分の検索力の無さを恨みますw

# やりたいこと

この画像の様な画像つきのボックスを
画像①
![2415a3dd1f923a6e01572cfe02229740.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658802/e39679ea-4266-17eb-e713-1d9503152175.jpeg)
こんな感じで幅をも持たせて各行に3個ずつ配置したい。
画像②
![e8b94a73a0ec11a4887dbd434183b041.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658802/8df10523-9b59-9907-9afb-387f710deaba.jpeg)

* まず前提としてボックスの親要素に“` display: flex;“`をかけています。

「ボックスのwidthを親要素の32%に広

元記事を表示

プログラムを書くときの注意点:その2

【概要】
—————————————-
1.結論
2.オープン・クローズドの原則とは何か
3.オープン・クローズドの原則どう使うのか
4.なぜオープン・クローズドの原則が必要か
5.ここから学んだこと

1.結論
—————————————-
オープン・クローズドの原則にも従おう!

2.オープン・クローズドの原則とは何か
—————————————-
●オープン・クローズドの原則とは、

拡張に対して開いていて、
修正に対して閉じていなければならない


つまり、拡張する分にはOKだけど、
拡張した時の修正範囲は最小限に止めようね。
そうしないと破壊的変更(とてつもない修正)を
しないといけなくなるということです!

3.オープン・クローズドの原則はどう使うのか
———————

Railsでデータベースの中身を確認する

#プログラミングの勉強日記
2020年8月17日 Progate Lv.226
今まではSQLiteStudioで確認していた。
SQLiteStudioの方が見やすいが、見るのに手間がかかるので、コンソールで確認することができたのでまとめる。

#方法
 SQLiteはデータベースサーバを使用しないで、データベースごとに1つのファイルを使うことで管理する。

##1. SQLiteコマンドのツールのインストール
 [SQLiteの公式サイト](https://www.sqlite.org/index.html)にアクセスする。Downloadをクリック。
![0817.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642821/71a1fcd5-b6ff-4ce7-c084-6973cf568873.png)

 Windows10の環境を利用するので、recompiled Binaries for Windowsのsqlite-tools-win32-x86-3330000.zipをクリックして、ダ

Rails enum 都道府県をプルダウン方式で選択

# はじめに

個人開発アプリでGoogle APIと連携して地図情報を取得できる様にしたのですが、

住所を全て手入力するのは面倒なので都道府県をプルダウン方式で選択できるようにしようと思います。

“`ruby:new.html.erb

<%= form_for @ride, method: :post do |f| %>
<%= f.select :prefecture, ['北海道', '青森県', '秋田県', '岩手県' 以下略], { include_blank: '選択してください' } %>
<% end %>
“`

コードの可読性を無視して実装するならこんな感じで入力していくだけなのですが、

このようにview側に47都道府県全てを入力すると**非常に見苦しい**と思ったのでスマートにできる方法を探してみました。

# enum
enumというものがあるようでこれによってviewではなくmodelに記述することができ、

view側のコードをかなりスッキリさせることができます!

“`ruby:
class CreateRides < Activ

テスト投稿です。

rails tutorial 学習日記
$rails console

An error occurred while installing libv8 (3.16.14.19), and Bundler cannot continue

bundle install しようとした時に libv8 でエラー
自分の環境では下記の手順で bundle install が通ったので、メモ。

– エラー

“`shell

An error occurred while installing libv8 (3.16.14.19), and Bundler cannot continue.Make sure that `gem install libv8 -v ‘3.16.14.19’ —source
“`

– rbenvにbundleをインストール

[「libv8とtherubyracerが入らない時の対処法」をやっても入らないとき – Qiita](https://qiita.com/shunsuke1980/items/b16f3f87b6df4e9de1c1)

> bundleがrbenv内のgemを使っていないとbundle installが通らないので、rbenvにbundleをインストール

– 下記のコマンドを実行

[macOS Mojaveで古いlibv8とtherubyracerが入らない時の

プログラムを書くときの注意点:その1

【概要】
—————————————-
1.結論
2.SOLID原則とは何か
3.単一責任の原則はどう使うのか
4.なぜ単一性の原則が必要か
5.ここから学んだこと

1.結論
—————————————-
単一責任の原則にも従おう!

2.SOLID原則とは何か
—————————————-
●SOLID原則とは、
i)単一責任の原則:1つのclassに1つの役割を
ii)オープン/クローズドの原則:追加機能はOK,ただ修正はせずに
iii)リスコフの置換原則:親クラスは子クラスと同じ動きに
iv)インターフェース分離の原則:利用用途に応じた最小限の動きに
v)逆依存性の原則:破壊的変更をさせるな

の英語名の頭文字を取ったものです!
(ここでは分かり易い書きたいため

Railsのコントローラーについて

# 概要
Railsアプリケーションの**コントローラー**について解説してみたいと思います。

# 今回のゴール
**『MVCモデルについて知る』**・**『コントローラーの役割について』**・**『実践的な使い方』**をついて確認することです。

# 1. MVCモデルとは
アプリケーションを作成する時に、コードを上手に管理するための考え方のひとつです。
あくまで考え方のひとつなので、絶対的に正しいというものではありません。
Railsアプリケーションは、このMVCフレームワークを取り入れています。

## MVCの3要素
**『Model』**・**『View』**・**『Controller』**になります。
 
・`Model` ・・・ システムの中でビジネスロジックを担当する

・`View` ・・・  表示や入出力といった処理をする

・`Controller` ・・・ ユーザーの入力に基づき,ModelとViewを制御する

## RailsにおけるMVCの処理の流れ

1. クライアントからのリクエストを**『Controller』**が受け取る

2. **『Con

docker-composeでDeviseを導入

Device
ログイン機能やユーザー登録機能をとても簡単に実装することができるgem。

参考にした記事
https://qiita.com/Orangina1050/items/a16e655519a60f35b394

下準備
コントローラーの作成 ついでにアクションとビューを作成する

“`terminal:terminal
$ docker-compose run web bin/rails g controller comments index
“`

導入編
Gemfileに、deviseを追加する。

“`terminal:terminal
$ docker-compose run web bundle install #deviseをインストールする
$ docker-compose build #構築する。
“`

終わったら、 deviseの設定ファイルを作成する

“`terminal:terminal
$ docker-compose run web bin/rails g devise:install
“`

ログイン機能用のモデル作成を行い(1

resourcesメソッド以外のアクションを行いたい場合

【概要】
—————————————-
1.結論
2.collection,memberメソッドとは何か
3.どのように使うか
4.なぜcollection,memberメソッドが必要か
5.ここから学んだこと

1.結論
—————————————-
member,collectionメソッドを使おう!

2.collection,memberメソッドとは何か
—————————————-
簡単に言いますと、
member:resourcesメソッド以外のアクション(特定のデータあり)
collection:resourcesメソッド以外のアクション(特定のデータなし)

resourcesメソッドについては以下のURLを参照してください!
URL:

特定のデータとは”:id”のことを指し、
“me

Rails jsファイルの読み込みはなぜviewの一番下に記述するのか?

##今までなんとなくでjsファイルの読み込みをviewの一番下に記述してたが、なぜそうするのかが学べたので備忘録投稿

##scriptタグを記述する場所
scriptタグを記述する場所は以下の2つ
– ``の直前
– ``の中

##どっちに記述した方がいいの?
**通常は``の直前に記述するのがいい。**
理由としてはブラウザがHTML要素を読み込むとき、上から順々に読み込んでいく。そのときにjsのコードを読み込むのはHTMLに比べて時間がかかる。
つまり上に記述される``の中にすると、jsの読み込み時間がかかってしまい肝心なHTML要素が読み込まれずに、ブラウザに何も表示されなくなる時間が発生してしまう。

## つまり``の直前に記述すると、、、?
``の最後に記述することによって、HTML要素の解析を済ましてからjsファイルの読み込みをさせた方が、ユーザビリティが高い

##例外
``が表示されると同時にjsを実行させた

CSV出力の0落ち対応

# はじめに
`001`などの先頭が0となっている数値をCSV出力しようとすると、0が省略され`1`と出力される問題の対応についてです。

# 対応

“`ruby
‘=”001″‘
“`
固定値の場合はこれで問題ないが、変数だと式展開されないので以下のようにする。

“`ruby
# ダブルクォートで囲むことに注意
%Q{=”#{hoge}”}
“`
Rubocop準拠すると、

“`ruby
# ダブルクォートで囲むことに注意
%(=”#{hoge}”)
“`

部分テンプレートの実装

##部分テンプレートとは
同じHTML構造の部分を共通化することによって、無駄なくビューファイルを作成することができます。この共通化された部分を、 部分テンプレートといいます。

部分テンプレートを使用した場合、そのHTML構造を他のビューでも使いまわすことができるという利点も存在します。

また、部分テンプレートのファイル名は必ずアンダーバー「_」から始まります。

##部分テンプレートを使用したい場所を切り取る
例えば、以下のeach文の中身を切り取る(command+x)。

“`app/views/posts/index.html.erb
<% @posts.each do |post| %>