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

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

HTML.CSS.JavaScript.Ruby.Rails概要

#HTML
 HTML(Hyper Text Markup Language)とはWEBページを作成する際に使用されるマークアップ言語である。
 WEBページのほとんどにHTMLが使用されている。
 HTMLは**タグ**を使いコンピューターに命令を出す事により見出しを付けたり段落を付けたりと、WEBページのレイアウト、構成を形作ることができる。
#CSS
CSS(Cascading Style Sheets)は先ほどのHTMLと組み合わせて使用する言語である。
CSSは文字の色やサイズ、レイアウトを変えたり、WEBページを装飾する言語である。
HTMLでもWEBページの装飾をすることは出来るが、CSSの役割なので分けて使う必要がある。
#JavaScript
WEBサイトに動きをつけるためのプログラミング言語である。
具体的には文章や画像を拡大表示したり、フォームに文字を入力できるようにしたり、より動的なWEBサイトを作ることができる。
サーバーを介さずにブラウザ上で動かすことができる。またこのようなプログラムをクライアントサイド・スクリプトという
#Ruby
Rubyと

元記事を表示

モデルとテーブル作成

#モデルとテーブルの作成を備忘録として残す。

###ターミナルでモデルを作成

“`
rails g model モデル名
“`
下記のログが出ればOK

“`
invoke active_record
create db/migrate/000000000_create_tweets.rb
create app/models/モデル名.rb
invoke test_unit
create test/models/モデル名_test.rb
create test/fixtures/モデル名.yml
“`

モデル名.rbが作成される。

###テーブルの作成

モデルを生成すると一緒にマイグレーションファイルが作られる。
dbフォルダのmigrateファイルにある。これを編集する。

“`
class Createモデル名(頭文字は大文字) < ActiveRecord::Migration[6.0] def change create_table :

元記事を表示

Rails5.1+puma ローカルのproduction環境でSSL接続する

Rails5.0から5.1にアップグレードし、ローカルでproductionの動作確認しようとしたら、何かとつまずいたので諸問題の解決方法をまとめておきます。

まず、 `rails s -e production` を叩いたところ、この接続にはセキュリティの問題があるのでWEBページを表示できません的なエラーが出ました。httpsにしないとダメなようです。

# SSLで接続する
基本的なやり方は、こちらの記事を参照させていただきました。
[Rails5 + pumaのローカル環境でSSL/HTTPSを有効にする](https://qiita.com/zaru/items/ccf328e87c768168134d)

上記記事は、opensslで証明書発行してましたが、エラーが出たので証明書の発行をmkcertでやりました。
mkcertでの証明書の発行のやり方は、こちらの記事が参考になりました。
[ローカル環境でSSLをオレオレ証明書で行っていて警告が出てる人に朗報](https://qiita.com/walkers/items/b90a97a99bbb27f6550f)

まず

元記事を表示

Railsを使ったToDoリストの作成(2.hamlの導入と書き方)

#概要
本記事は、初学者がRailsを使ってToDoリストを作成する過程を記したものです。
私と同じく初学者の方で、Railsのアウトプット段階でつまづいている方に向けて基礎の基礎を押さえた解説をしております。
抜け漏れや説明不足など多々あるとは思いますが、読んでくれた方にとって少しでも役に立つ記事であれば幸いです。

#環境
* `Homebrew: 2.5.10` -> MacOSのパッケージ管理ツール
* `ruby: 2.6.5p114` -> Ruby
* `Rails: 6.0.3.4` -> Rails
* `node: 14.3.0` -> Node.js
* `yarn: 1.22.10` -> JSのパッケージ管理ツール
* `Bundler: 2.1.4` -> gemのバージョン管理ツール

“`:iTerm
$ brew -v => Homebrew 2.5.10
$ ruby -v => ruby 2.6.5p114
$ rails -v => Rails 6.0.3.4
$ npm version => node: ‘14.3.0’
$ yarn -v

元記事を表示

Rails SecureRandom.alphanumericを使ってテストアカウントのパスワードを生成する

railsでアプリケーションを作成しています。
テストアカウントでのログイン機能を実装したときにエラーが発生したため、自分が行った解決方法を記録として残しておきます。

## 開発環境
Ruby 2.6.5
Rails 6.0.3.3

## 実装内容
以下のコードでテストログイン機能の実装を行いました。

“コントローラー“

“`ruby

class Users::SessionsController < Devise::SessionsController # ゲストユーザーとしてログイン def new_guest user = User.find_or_create_by!(nickname: 'ゲストユーザー', email: 'user@example.com') do |user| user.password = SecureRandom.alphanumeric end sign_in user redirect_to root_path, notice: 'ゲストユーザーとしてログインしました。' end

元記事を表示

【Rails】カラムの追加・データ型/カラム名の変更

##はじめに
カラムの追加・カラム名、テータ型の変更をする手順として代表的なのが、
1⃣“`rails db:migrate:status“`で現状の確認
2⃣マイグレーションファイルの作成or追加コマンドをターミナルに入力(行いたい操作でコマンドは異なります)
3⃣マイグレーションファイルに変更内容を記述(追加の場合は内容の確認だけになります)
4⃣“`rails db:migrate“`
だと思います(違ってたらすみません)。もちろんこれも正解だと思います。(rails db:rollback使うこともあります)毎度コマンドを調べたり誤字があるとテーブルが謎に消えてしまうことがあるかと思います、、、
####**レコードの内容が消えていいような場合は楽な方法があるそうで、、(ご存じの方はすみません)**
※レコードの内容が少なかったり消えても良い状態、seeds.rbで必要なデータを作成しているとき向けの内容です。
##上記の楽な方法(複数同時変更も可能)
1⃣“`rails db:migrate:status“`で現状の確認(問題なければ2⃣へ)
2⃣既に作成してある

元記事を表示

エラーメッセージの重複をなくしたい

##エラーメッセージの重複①
form_withメソッドを使って、
form.number_fieldで数値を入力させるフォームを作った。
正しい数値を入力すればエラーは起きないし、バリデーションを超える数値を入力しようとすると、そのタイミングでエラーが出る。
しかし、空のまま入力フォームを送ると、


○○を入力してください
○○は不正な値です
○○は一覧にありません

と、エラーが3つも出てしまう。
空を送信しただけで、3つもいらん!!!

###解決方法

“`ruby:model
with_options presence: true do
validates :grade, format: { with: /\A[0-9]+\z/, allow_blank: true}, inclusion: { in: 1..7, allow_blank: true }
validates :class_number, format: { with: /\A[0-9]+\z/, allow_blank: true }, inclusion: { in: 1

元記事を表示

deviseをRailsで扱う

まず、こちらではデバイス導入の一連の流れ(自分が行った)ことを復習として、また忘れないようこちらに記載させていただこうかと思います。
初学者なので間違ったことを伝えていた場合は、都度ご連絡お願い申し上げます。

##deviseについて
まず、デバイスの概要ですが、こちらはユーザー管理機能を実装するためのGemです。
新規登録やログインログアウトなんかが簡単に実装できます。

##deviseの導入
Gemfileを編集しましょう

“`
gem ‘devise’(一番最後の行に追記しましょう)
“`

これで、ローカル、テスト、本番環境でデバイスが扱えます。

##ローカルサーバーを再起動
Gemをインストールした後はターミナルで起動しているローカルサーバーを一度再起動しましょう。
インストールしたGemの反映のタイミングが、サーバー起動時のためです。

##deviseの設定ファイルを作成
deviseを使用するためには、Gemのインストールに加え、devise専用のコマンドで設定ファイルを作成する必要があります。
こちらのコマンドでファイルを作りましょう

“`
% rai

元記事を表示

【アウトプット】データベースについて

データベースの振り返りをしたのでここでも書いていく

ターミナルでテーブルを作るとき
$ rails g model Post content :text
Postはモデル名 contentはカラム名 textはデータ型
textは長い文字列という意味、つまりcontentに入るのはtext(長い文字)ということになる。
「こんにちは」とか

これをターミナルで実行するとmodelとmigrateに2つのファイルが入る
1.migrateには「2020…_create_posts.rb」というものが作られている

ファイルを開くとこんな感じなのがある
dif change
create_table posts do |t|
t.text:content

t.timestamps

2つめはあることをしないと作成されない
rails db:migrate と書く。

以上

元記事を表示

アソシエーション(1対多の関係)

# アソシエーション(1対多の関係)

##1.アソシエーションとは?
 簡単に表現すると「各モデル同士を関連付ける」ということである。つまり、テーブル同士で関連付けておき、**一方のモデルからもう一方のモデルにアクセスできる**ようにすることである。

例. **1人のuserが複数のコメントを所有するパターン(1対多の関係)**
![aso0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/875779/0266acdc-6c52-f18d-cf59-7bdf346b3206.png)
 →「**Aさん**」とAさんのコメントである「**おはよう**」、「**こんばんは**」を結びつける。
 →「**Bさん**」とBさんのコメントである「**こんにちは**」、「**さようなら**」を結びつける。
##2.has_manyメソッドとbelongs_toメソッド
では、どのようにアソシエーションをコードで再現するのか示してみる。
上記の**1人のuserが複数のコメントを所有するパターン(1対多の関係

元記事を表示

【RSpec】WebMockを利用して外部APIを利用したロジックのテストをする

[【Ruby】faradayを利用した外部API連携クラスの作成手順](https://nishinatoshiharu.com/faraday-apiclient/)の記事で、Faradayを利用した外部APIとの連携方法について紹介しました。

外部APIを利用したロジックのテストコードでは、実際のAPIを利用するのではなくHTTPリクエストをスタブ化するのが一般的です。
Railsでは[webmock](https://github.com/bblimke/webmock)というgemを利用することでHTTPリクエストのスタブ化ができます。

今回はWebMockを利用して、外部APIと連携したロジックのテストコードを作成する方法について紹介します。

## テストコードの対象となるクラス
今回は`QiitaClientAPI`というQiita APIと連携するクラスのテストコードを作成します。
クラスには`get_items`という記事一覧をQiitaから取得するメソッドが実装されています。

具体的なソースコードは以下の通りです。

“`ruby:lib/qiita_ap

元記事を表示

Webデザイン 色のイメージ

#はじめに
現在オリジナルアプリを作成中です。トップページのフロント実装時に色合いの考え方を調べました。忘れても思い出せるよう書き記します。

**開発環境**
ruby 2.6.5
Rails 6.0.3.4

#目次
1.色の効果
2.オリジナルアプリの配色

#1.色の効果
Webデザインで使う色は目的別で選ぶ必要がある。Webサイトを利用するユーザー目線に立つことが重要である。

赤系
——–
熱い、生命力、警告

オレンジ系
——-
近親感、陽気

黄系
——-
好奇心、協力

緑系
——-
自然、リラックス

青系
——-
冷たい、静けさ、誠実

元記事を表示

RailsとClean Architectureに関する考察

Railsのアプリケーションの設計について考える機会があったのでその過程で考えたこととをまとめておきます。

## 背景
Railsをメインで使用している企業で新規のWebアプリケーションを0ベースで作ることになった。
その企業はRailsでかなり大規模なアプリを運用しており、Rails自体の知見は十分。

一方で伝統的なRailsでの開発手法に大規模開発の限界も感じており、この機会に設計のPrcaticeを模索したいという要望もあります。

筆者の方はアプリケーションの設計にはそれなりに自信がありますが、普段使用している言語はScalaやNodeJS(TypeScript)がメインです。
Railsでの開発は何度もやっており、特に開発に不自由することはありませんが、フレームワークの細かい癖などはあまり把握していません。

今回の要件では元々のチームのスキルを活かすために、Rails自体を別の言語やフレームワークに置き換えることは考えません。

Railsの良さを活かしつつモダンな設計手法を取り入れるにはどうすれば良いかを考察するのがこの文書の主目的になります。

## 基本設計方

元記事を表示

【Git/GitHub 共同開発】知っておきたいコンフリクト解消とコードレビューの基本

# 概要

現在所属中のオンラインサロン「転職クエスト」にて、Railsアプリ共同開発を行っています。

恐れながらファシリテーターを務めさせてもらっているのですが、開発をすすめる上で全員のネックになっていたことがありました。

“Git/GitHubの共同開発的な使い方がわからない。。。“

なので、開発を進めるファシリテーターとして、“Git/GitHubをこうやって使おうぜ!“というマニュアルを用意しておこうと考えました。

本記事では“共同開発 初心者さんたちに向けたGit/GitHubのフロー“について紹介します!

“`:想定読者
1. アプリの個人開発のためにGit/GitHubを使ったことはある
2. コンフリクト解消のやり方を知りたい!
3. コードレビューのやり方を知りたい!
“`

# そもそも、どこがわかっていない?

“Git/GitHubを使って共同開発をする上で、ネックになる部分はどこか。“
考えるために、これまで行ってきたGit/GitHubの使い方を振り返ってみます。

“`:個人開発でのGit/GitHubの使い方

元記事を表示

この問題地味に難しい…(Ruby)

#0から9までのカウント(Ruby編)
#問題
0から9までを数えるカウンタを考えます。

0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9

このカウンタの拡張として、任意の数から始められるカウンタを考えました。

2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 0 → 1
(2から始める例、カウンタは9まで進んだら0に戻ります)

入力から数字nを受け取り、nからカウンタをスタートさせて、

カウンタの値を順番に10個出力するプログラムを実装してください。
#入力される値
入力は以下のフォーマットで与えられます

n

・nはカウンタの最初の値

#期待する出力
nから始まるカウンタの10個の値を、順番に改行区切りで出力してください。
#入力例1
0

#出力例1
0
1
2
3
4
5
6
7
8
9

#入力例2
2

#出力例2
2
3
4
5
6
7
8
9
0
1
#私の回答(結局解けなかった)
“`java:
n = 2
# nが10まで進んだら0にリセットする、それ以外はパスして10個出力
for i in n..9 d

元記事を表示

Rails 正規表現での^,$

# 例

## 郵便番号を正規表現でチェックする

### エラーが出た実装

“`ruby:user.rb
class User < ActiveRecord::Base validates :zip_code, format: { with: /^\d{3}\-?\d{4}$/ } end ``` これでアプリケーションを実行すると以下のエラーが出ました。 ``` The provided regular expression is using multiline anchors (^ or $), which may present a security risk. Did you mean to use \A and \z, or forgot to add the :multiline => true option?
“`

セキュリティリスクがあるので

– 行頭の “`^“` は “`\A“`
– 行末の “`$“` は “`\z“`

を使え、と言われた。

### 修正した実装

“`ruby:user.rb
class User

元記事を表示

EC2に自動デプロイ後、変更が反映されていないときの対処法

内容としてはタイトルにある通りですが、EC2に自動デプロイを行った際に変更が反映されておらず、めちゃめちゃ焦りました。
今後同じことがあったときに焦ることがないよう、備忘録として残しておきます。

## 環境
AWS EC2
Ruby 2.6.5
Rails 6.0.3.3
capistrano

## 結論
EC2インスタンスを再起動する。
自動デプロイを複数回行うと変更が反映されないことがあるためその際はインスタンスの再起動を行います。
再起動手順については[こちらの記事](https://qiita.com/qolayumusou/items/a34cccbb07802c94eeef)にわかりやすく解説されています。

## 最後に
インスタンスの再起動を行った際はデータベースとNginxの再起動も忘れずに行うこと!

1.EC2インスタンスにログイン

“`:ターミナル
hoge@MacBook ~ % cd .ssh
hoge@MacBook .ssh % ssh -i ダウンロードした鍵の名前.pem ec2-user@該当EC2インスタンスと紐付けたElasti

元記事を表示

【Ruby On Rails】ActionView::Template::Error (ActiveStorage::InvariableError)の原因と対処法(仮説・検証)

備忘録です。
ActionView::Template::Error (ActiveStorage::InvariableError)の原因と、その対処法について仮説・検証しました。

# エラー背景・経緯
デプロイしたアプリの動作確認を行うことにしました。今回は画像がアップロードされているかどうかを、簡易的に手動で確認したいため、単体テストや結合テストを行わずに動作確認を行うことにしました。

今回は周りの友達に動作確認テストの協力をしてもらいました。
協力内容としては、画像を投稿できるフォームにファイルを添付して、投稿したファイルがビューに表示できるかどうかを確認して欲しいと依頼しました。

# エラー内容
協力者である友達から、画像ファイルを添付したと報告をもらったので、デプロイしたアプリの詳細画面を確認しました。すると、”We’re sorry but something went wrong”と表示されてしまいました。

まずは、ターミナルでログとそのエラー内容を確認しました。(今回はheroku)

“`terminal
% heroku logs –tail

(中略

元記事を表示

日本時刻設定と表示方法まとめ

#はじめに
自分用の備忘録
忘れがちなのでまとめてみる

#手順
## 日本時刻設定
### アプリケーションファイル編集
“`ruby:config/application.rb
# 中略

module App
class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 6.0 # 日本語の言語設定 config.i18n.default_locale = :ja # 日本時刻の設定 config.time_zone = 'Tokyo' # 中略 ``` ### 時刻のフォーマットを設定 ``` config/locales/ja.yml => 作成
“`
“`yml:config/locales/ja.yml
ja:
time:
formats:
default: “%Y/%

元記事を表示

Ruby on Railsでのテーブル作成→レコード作成、削除→テーブル削除の一連の流れ

#はじめに
Ruby on RailsのDB操作に慣れるための覚え書きも兼ねた完結型の筋トレセットです。

テーブル削除の手順などは自分も含めた初心者にとって少し複雑だと思いますので、繰り返し練習などでお役に立てば幸いです。

すでにお使いのRailsアプリにデータベースがインストールされていることを前提にしているので、データベース作成がまだの方は「rails db:create」でデータベースをご用意ください。
#環境
Ruby 2.7.2
Rails 6.0.3

# テーブルの新規作成
まず、ターミナルからRailsアプリのあるディレクトリに移動する。

“`console:console
> cd (フォルダのアドレス)
“`

モデル作成のためのマイグレーションファイルを作成。
(例:モデル名「User」、フィールド名「name」、「address」、「age」)

“`console:console
> rails g model User name:text address:text age:integer
“`

この時点で「User」モデルを定義したクラスフ

元記事を表示

OTHERカテゴリの最新記事