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

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

Rails5.2でMaterial Design for Bootstrapを使う

## 何をしたか
Railsの課題を実施しています。装飾に関しては、`Material Design for Bootstrap`を使用することになっていたのですが、WebpackerではないJS系のライブラリの導入が久しぶりで…。
だいぶ忘れていたので手順をメモします。

なお、実行環境は以下の通りです。

– Rails 5.2.3
– Ruby 2.6.4

## Material Design for Bootstrapとは?
Material Design for Bootstrap(以下、MDB)は、[Googleのマテリアルデザイン](https://material.io/design/introduction)に準拠した、Bootstrapのフレームワークです。

[Githubの公式レポジトリ](https://github.com/mdbootstrap/bootstrap-material-design)に、色々便利なリンクがありました:relaxed:

– [ホームページ](https://mdbootstrap.github.io/bootstrap-

元記事を表示

[個人開発]人生経験を共有するコミュニティサイト作ってみた!

新しいwebアプリ開発しました。「Elder」という人生経験を募集、公開、評価できるサイトです。今回は作ったwebアプリの紹介、サービスのネタの考え方、herokuの無料プランでスリープにさせない方法など書いていきます。今回は前回みたいなヘマしないように頑張ります(^^♪

[今回作ったWebアプリはこちら](https://e-elder.herokuapp.com/)

##紹介
![Elder-top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/a27fc9ff-ead1-c620-8d8b-fe821cb0a3bd.png)

↑トップページ
人生経験を共有するコミュニティサイトです。
人生経験の募集、エッセイ、一言だけ投稿、などができます。
現在技術系の記事ばかりですが、分野は問いません。

募集中のところはスライドショーになっていて動きます。一か所でも動くところがあると凝ったサイト感が出ます。
イメージカラーは**紫**を選びました。
使ってみた感想として、いろんな色とは合わ

元記事を表示

Rails開発の変遷2020

# 概要
– webサイトの作成はRailsを使ってきた。
– 今年はHTML、CSSを学び、UIを作るようになった。
– vue/nuxtを学んでから、開発の仕方が変わった

# Webpack
– Rails本来のview作成はerb形式。slimで書くのが普通らしい
– Rails 5.2からWebpackをサポートし、vueを使ってHTMLを作成できるようになった。知らんけど。
– viewsにはjavascriptを参照する記述のみ。実際の中身はjavascriptディレクトリに作成する

## やり方
– Qiitaにわかりやすいチュートリアルがあるので、それを参考にするのが良い。
– vue側はvue CLIを使ったほうが開発が捗る。vue CLIである程度完成させてから、railsのjavascriptにコピペするような方法で作成した。

## 欠点
– 何も設定せずに開発すると、vueを更新した後にrails sを立ち上げなおす必要がある。
– vue-routerを使っていると、ホットリロードした時にルーティングエラーがでてしまう。

# サーバー側とフロント側を

元記事を表示

パラメーターが配列の場合、ストパラのparams.permitに含める方法

# パラメーターが配列の場合、ストパラのparams.permitに含める方法

# 状況
1つのusersテーブルに対して、同時に複数のレコードを作成するために下記のようなパラメーターを送りました。

“`.rb
 Parameters: {“users”=>[{“name”}=>{“satoshi”}, {“name”}=>{“yuta”}]}
“`

## 受けるストパラは下記

“`.rb
private

def users_params
params.require(:users).permit(
:id,
:name
)
end
“`

# 発生したエラー
requireした後にpermitメソッドを使うと、
「**permit?そんなメソッドは知らんよ**」と言われてしまいました。

“`.js
[1] pry(#)> params.require(:users).permit
NoMethodError: undefined method `permit’
for #

元記事を表示

scopeメソッドの主な機能

scopeメソッド、名前から機能を推察するのがむずかしいだけでなく出てくる場面もいろいろでややこしいので整理した。

#1 scope(name, body, &block)
特定の条件を持ったオブジェクトをデータベースへ問い合わせるためのクラスメソッドを生成する。モデルで呼び出す。コントローラのアクションの記述をシンプルにしたいときに使える。

“`ruby:shirt.rb
class Shirt < ActiveRecord::Base scope :red, -> { where(color: ‘red’) }
end
“`

↓同義

“`ruby:shirt.rb
class Shirt < ActiveRecord::Base def self.red where(color: 'red') end end ``` 第一引数にメソッド名を表すシンボル、第二引数に検索条件を示すブロック{ where.. }を引数として受けたラムダ式“->“が返すProcオブジェクトが渡されている。
->はlambdaに代替しても同じ。

#2 scope(*ar

元記事を表示

FactoryBotで関連データを一緒に作成 自分用

## after(:crate)を使いましょう

####case

userがteacher_accountにアップデートした際、
user_performanceを関連データとして作成。

user_performanceはポリモーフィック関連を利用

####code

“`ruby
FactoryBot.define do
factory :user do
sequence(:username) { |n| “Testuser#{n}” }
sequence(:email) { |n| “tester#{n}@example.com” }
password { ‘password’ }
phone_number { “0#{rand(0..9)}0#{rand(1_000_000..99_999_999)}” }
confirmed_at { Date.today }

trait :teacher_account do
teacher { true }

元記事を表示

RSpecにてプライベートメソッドのテスト方法 自分用

##結論

sendで送る

calculate_average_scoreはプライベートメソッド

“`ruby
let!(:user) { create(:user) }
context ‘calculate_average_score’ do
subject { user.send(:calculate_average_score) }
it { is_expected.to eq ** }
end
“`

元記事を表示

作ったポートフォリオを簡単に解説してみる。

#何を作ったのか?
### アプリ名 Dig Memo
思考を深掘る事を意識して作ったメモアプリです。
下記URLで公開中しております!
http://www.digmemo-app.xyz/
#なぜ作ろうと思ったのか?
#### 思考をサポートできるサービスを作りたいと思ったからです。

プログラミング学習をしている時に、ただ勉強するよりも思考して勉強する方が、知識が定着しやすいと感じました。しかし、ただのメモだと楽をしてインプットした情報をそのまま吐き出すこともできてしまうなと思いました。そこを制限して思考をサポートすることができるサービスがあったらいいのではないか?と思い、作ることにしました!

# どんな機能を実装したのか?
### 機能一覧
・メモ投稿・編集・削除機能
・カテゴリー機能
・全文検索機能
・お気に入り機能
・ページネーション機能
・メール認証機能
・パスワードリセット機能
・ゲストログイン機能

### ER図
![Copy of Untitled Diagram (1).png](https://qiita-image-store.s3.ap-northeas

元記事を表示

プログラミングスクールのメンターを辞めました

# 概要

半年近くとあるプログラミングスクールでメンターをしていましたが、諸事情で辞めました。これは決してネガティブな理由でやめたわけではないのはお断りしておきます。半年間メンターをしてみて、SNSでの悪評なども踏まえた上でプログラミングスクールに通うという選択についてどう思うのか個人の意見として書きます。内容は鵜呑みにはせず参考程度に考えてもらえると幸いです。ちなみにこの記事はスクールの比較記事ではありません。なのでおすすめのスクール紹介等は一切ありません。

# 結論

最初に結論を述べておきますが、**プログラミングスクールに通うという選択自体は悪くない**です。ただし、どのスクールを選択するのか、スクールの利用の仕方、自身の考え方によってはお金の無駄になる場合があると思っています。ただ個人的にはスクールに通う必要性というものは全くなく、好きな時間に質問できる環境や転職保証としての利用であればアリ程度です。

# スクールに通うメリット

箇条書きで書き出しますと、以下の通りです。

– 学習の手順が明確なので手を動かしやすい
– お金を払っているのでどんな内容でも堂々と質問で

元記事を表示

【Ruby On Rails】DBに一意性を与えるユニーク制約(unique)の正しい記述場所

備忘録です。

# ユニーク制約とは
一意性制約のことです。DBにおいてデータを追加や更新する際の制約。カラムに独自性を与えます。

例えば、ユニーク制約を適用することで、ユーザーが新規登録をする際に、既に登録されているemailアドレスと同じアドレスで登録しようとした場合にエラーを返すことができます。

# uniqueの書き方

“`ruby
add_index :テーブル名, [:カラム名1, :カラム名2, :カラム名3, …(続く)], unique: true
“`

テーブル名をcontents、カラム名をpart_idとwordとした場合は次のようになります。

“`ruby
add_index :contents, [:part_id, :word], unique: true
“`

# 記述場所

以下のように、マイグレーションファイルのchangeメソッド内に記述するようにしましょう。

“`ruby:マイグレーションファイル
class CreateContents < ActiveRecord::Migration[6.0] def ch

元記事を表示

そうだったのか、user_signed_in?メソッド

#はじめに
 プログラミングの学習を始めた頃から、ずっと思っていることがあります。メソッド名についてです。

 メソッド名、どこまでは、意味をもっているものなのかわからない問題。
メソッドは自分でも作れる故、どこまでが、意味を有しているのか、判断がつきません。この記事では、今まで`user_signed_in?メソッド`は全てに意味を有していると思っていたが、そうではなかったことを紹介しています。

##deviseとは
 Rubyで扱うことができる、gemの一つで、ユーザー管理機能がまとまっていて、簡単にログイン機能等を実装できる、便利なgemです。

##いつもの流れ

deviseを使ってユーザー管理を行うときに、ターミナルで、モデルやコントローラー、ビューを生成させます。
例)

“`bash

rails g devise user
“`

そう、いつも`user`をモデル名やコントローラー名にしています。

##user_signed_in?メソッド
 ユーザーがサインインしているかを確かめるためのメソッドで、
サインイン

元記事を表示

[Ruby on Rails] CarrierWaveの使い方

#CarrierWaveとは
ファイルアップロードを簡単に追加することができるgemです。

#CarrierWaveのインストール
`Gemfile` に以下を追記した後、コマンドを実行してgemをインストールします。

“`
gem ‘carrierwave’
“`

“`
$ bundle install
“`

#アップローダーの作成
`rails g uploader アップローダー名` をコマンドで実行すると、 `app/uploaders/image_uploader.rb` ファイルが作成されます。
今回は、アップローダー名を `image` にしています。

“`
$ rails g uploader image
“`

#モデルとの紐付け
`mount_uploader :アップローダー名, クラス名` を関連づけるモデルに追加していきます。

“`
class Post < ApplicationRecord mount_uploader :image, ImageUploader end ``` #コントローラーの編集 画像をアップするため

元記事を表示

Railsアプリ ゲストログイン機能を実装(devise不使用)

# はじめに
Webアプリのポートフォリオを作成する際、ゲストログイン機能はほぼ必須の機能かと思います。

ゲストログイン機能の記事はいくつかQiitaに挙がっていますが、現在(2020年12月)ほとんどdeviseを使ったものしかありません。
僕はdeviseを用いずにログイン機能を実装していたため、少し手こずりました。
僕のようにdeviseを用いずにポートフォリオを作っている方は参考にしてみてください!

**注意**
この記事では、ログイン機能の実装方法までは詳細に書きません。
deviseを使わないログイン機能のことを知りたい方は以下の記事を参考にしてみてください。

https://qiita.com/d0ne1s/items/7c4d2be3f53e34a9dec7

#環境
– Ruby version 2.7.2
– Rails version 6.0.3.4

#ゲストログイン機能実装
※以下sessionsコントローラーにてログイン機能を実装している前提で進みます。

**①コントローラー作成**

“`java:
$ rails g controller gu

元記事を表示

Rails チュートリアル 第7章 備忘録

第7章の備忘録です。

##環境
Rails 6.0.3
Ruby 2.6.3

##目次
[1 開発環境でデバッグ情報表示](#1-開発環境でデバッグ情報表示)
[2 リソース](#2-リソース)
[3 debuggerメソッド](#3-debuggerメソッド)
[4 Gravatar画像設定](#4-gravatar画像設定)
[5 form_withヘルパー](#5-form_withヘルパー)
[6 ストロングパラメーター](#6-ストロングパラメーター)
[7 パーシャルでエラーメッセージ表示](#7-パーシャルでエラーメッセージ表示)
[8 ユーザー登録成功時のテスト](#8-ユーザー登録成功時のテスト)
[9 SSLとPumaの設定込みのデプロイ方法](#9-sslとpumaの設定込みのデプロイ方法)

###1 開発環境でデバッグ情報表示

“`app/views/layouts/application.html.erb
.
.
<%= yield %>
<%= render 'layouts/footer' %>
<%= de

元記事を表示

親子孫ひ孫関係?〜外部キーの持たせ方〜

初心者です?
ポートフォリオを設計した当初、リレーションの認識が甘く、
データベースから見直しするハメになってしまったのでその備忘録です。

####まず手始めにテーブルの親子関係について
ユーザーがクチコミの投稿をできるような機能を作りたい!といった時
user has many reviews (反対に、 review belongs to user)といった関係になるので、
usersテーブルが親、reviewsテーブルが子という関係になるわけです。
####親子関係のテーブル設計
・usersテーブル(親),reviewsテーブル(子)
・子は、親の情報が必要。(誰の投稿かという情報が欲しい)
?reviewsテーブルにはuser_idという外部キー(FK)が必要

ふむ? テーブル同士がリレーションを持った時、子は親の情報(外部キー)が欲しいのねぇ
ER図は下のようになります
![名称未設定](https://user-images.githubusercontent.com/65491593/103148685-c712b500-47a5-11eb-9d19-

元記事を表示

ActiveStorageについて

# はじめに
ActiveStorageについて、なかなか知識が定着しないのでメモとして。。
間違っている部分など、ご指摘いただけると助かります。

# ActiveStorageについて
ActiveStorageとは、Ruby on Railsに標準で装備されているGemであり、これを使うことで画像ファイル等のアップロードを簡単にするメソッドの使用や画像を保存するテーブルを簡単に作成することができるメリットがある。

# ActiveStorageを使用するには
ActiveStorageを使用するにあたって以下をインストールする必要がある。
・ImageMagick(コマンドラインで行える画像変換ツール)
   ->Gemではなくソフトウェアのため、Homebrewからインストールする
・mini magick(Rails上でImageMagickの機能を使用するためのGem)
・image processing(mini magickでは行えない画像サイズを調整するためのGem)
   ->上記二つに関しては、GemFileに記述後、bundle installを実

元記事を表示

Rails Credentials メモ

現場で用いていたため、言語化できるように調べる

##「Credentials」とは
**production(本番)環境**に関する特定の方式で管理される**秘密情報**のこと
また、**管理する仕組み**を指す

Rails5.2から導入された機能

APIの秘密鍵等の機密情報を管理するのは、難しい
・アプリが秘密情報を利用できるようにしたい
・開発者が必要に応じて、確認、変更したい。また開発者同士で共有したい
・リポジトリに機密情報を格納すると、漏洩の危険性がある

##使い方
production環境の秘密情報は、「**config/credentials.yml.enc**」
に記載する

このファイルは、常に暗号化された状態で保存される

ファイルは、Railsが用意している専用コマンドで動作する

Railsのアプリケーションがproduction環境で起動された際には
`master.key`ファイルもしくは、`RAILS_MASTER_KEY`環境変数から
キー情報を取り出して、秘密情報を内部的に復号して利用する

#参考記事、書籍
現場Rails

元記事を表示

gem Redisを導入して、セッション情報を管理した話

## 何をしたか
とあるRailsのカリキュラムを実施しています。セッション情報の管理に[Redis](https://github.com/redis-store/redis-rails)を使うことになっていましたが、初めてつかうgemなので、簡単に内容を調べてみました。

なお、実行環境は以下の通りです。

– `Rails 5.2.3`

## 2020年12月時点にあった、公式からのお知らせ
まずは、[公式のドキュメント](https://github.com/redis-store/redis-rails)で内容を把握しようとしたところ、初めにこんなことが書いてありました。

> Rails 5.2.0にはすぐに使えるRedisキャッシュストアが含まれているため、フラグメントキャッシュをRedisに保存するだけでよい場合は、このgemはもう必要ありません。 redis-activesupport gemのメンテナンスは、セキュリティと互換性の問題のために継続されますが、新しい機能は受け付けていません。セッション管理用のredis-actionpackやHTTPキャッシュストレ

元記事を表示

既存プロジェクトの Bundler1.x -> Bundler2.x

# はじめに

Ruby on Rails の既存プロジェクトを Bundler1.x -> Bundler2.x したので、
その手順を書いてみました。

# Bundler2 のインストール

開発環境を新規構築している場合は

“`
% gem install bundler
“`
既存の環境を利用している場合は

“`
% gem update bundler
“`
次のコマンドでインストールしたBundler2のバージョンを確認できます。

“`
% bundle -v
“`

# プロジェクトのルートに移動する

“`
% cd プロジェクトのルート・パス
“`

# プロジェクトを Bundler2 に対応させる

“`
% bundle update –bundler
“`
このコマンドがエラーになる場合は、Gemfile.lockを消して、
Gemfile.lockを作りなおします。

作りなおす前に、Gemfile.lockの中身を確認し、固定しておきたいgem
については、Gwmfileに反映することをオススメします。

“`
% rm

元記事を表示

【Rails】プルダウンで数字を簡単に実装する方法

<この記事について>
自作のマッチングアプリ製作中に、ユーザー登録機能を実装しています。
その中で、「年齢」の項目は手打ちではなく、プルダウンで実装できれば
UXが向上して良いのではと考えました。
調べてみると、いとも簡単に実装できたので備忘録として投稿します!

[環境]
・Ruby 2.6.5
・Rails 6.0.0
・macOS

<前提>
ユーザー管理機能は、「device」gemを用いて導入済みとします。

app > views > devise > registrations > new.html.erb

元々は、手打ちでの実装のため以下のように記述していました。

“`ruby
<%= f.text_field :age, autocomplete: "off" %>
“`

“text” → “number”に修正してみましょう!

“`ruby
<%= f.number_field :age, autocomplete: "off" %>
“`

簡単に実装できました!

元記事を表示

OTHERカテゴリの最新記事