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

Rails関連のことを調べてみた2021年12月14日
目次

Rails Googleフォント 使い方(初心者)

#Google Fontとは
Googleが提供するWebフォントのサービスです。
基本無料で使用できます。
下記GoogleフォントのURL

https://fonts.google.com/

###Webフォントとは
Webフォントはネットワーク上からフォントデータを読み込みWebサイトやブログに表示する仕組みを利用しています。
異なるデバイスで見ても意図したWebフォントを表示することが可能。
##実装の手順
①使いたいGoogleフォントを探す( link と CSS rules to specify familiesをコピー)
②app/views/layouts/application.html.erb のheadの中にlinkを貼り付ける
③app/assets/stylesheets 内にある使いたいscssにCSS rules to specify familiesを貼り付ける

###①
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2274768/5c3dcc3

元記事を表示

[Rails] devise_token_authを開発途中から導入

# 実装の背景
Railsだけのコードで作られた既存のアプリをRailsとReactにリプレースする。
既存のアプリでは認証機能に`devise`を用いたsession認証を使用。

これに対し、
リプレースする際にトークン認証が必要となり`devise_token_auth`を導入した。

#gemのインストール

“`:Gemfile
gem ‘devise’
gem ‘devise_token_auth’

gem ‘omniauth’, ‘>= 1.0.0’
“`

`devise`は認可処理を行う場合、これがないとエラーが起こる可能性があるため入れている。

`omniauth`はマイグレーションの際に、

“`
Could not lord ‘omniauth’. Please ensure you have the omniauth gem >= 1.0.0 installed and listed in your Gemfile.
“`
というエラーが出たので、解消するために入れましたが
本来`omniauth`は`Oauth2認証を入れたいならOmniAuth

元記事を表示

【Rails】deviseとomniauth-twitterでTwitterアカウントを使った認証処理

#環境
ruby 2.6.7
Rails 5.2.6

#手順

##TwitterAPIの設定

TwitterAPI登録作業については、こちらを参考に行いました
https://pocco.net/twitter-developer/

Twitter社の審査があって、取得に時間がかかるので注意です。

登録が出来たらDeveloper Portalのページで設定します
https://developer.twitter.com/en/portal/dashboard
登録の際に表示されるAPIキーは後で使います。

アプリの作成から
Settings → Authentication settingsと進んで
Callback URLsを設定します。

“`
http://127.0.0.1/users/auth/twitter/callback
http://localhost:3000/users/auth/twitter/callback
http://(本番環境のURL)/users/auth/twitter/callback
“`

![スクリーンショット 2021

元記事を表示

点字メーカーを作ってみた! ~チェリー本改訂版発売記念アドベントカレンダー企画~

##はじめに
この記事は[Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念](https://qiita.com/advent-calendar/2021/ruby-challenge)の点字メーカープログラム作成したので、それについての解説記事です。

* 作成した人
* Ruby歴半年、今年6月からエンジニア転職を目指して毎日働きながら学習継続中
* 新卒で地元のメーカーに就職した社会人2年目の23歳

* なぜこちらの企画に参加したのか
* 伊藤さんのコードレビューを受けれるかもしれないから
* チェリー本を愛用しているため、形ある貢献がしたかったから
* Qiitaでアウトプットがしたかったから(初記事です)

* 完成したプログラムのプルリク↓

https://github.com/JunichiIto/tenji-maker-challenge/pull/23

##お題の概要
今回作成したプログラムは、入力されたローマ字に対応する点字をテキストで出力します。
以下が実行例です。

“`
t

元記事を表示

モデルスペックにおける超基本的なテスト(Postモデルver.)

RSpecのモデルスペックではバリデーションやインスタンスメソッドをテストします。
今回はバリデーションの中でも基本的な`presence: true`を取り上げてテストしてみました。

# 1. Postモデルのバリデーション確認

今回Postモデルにはcontentカラムが存在すること(`presence: true`)がバリデーションによって制限されています。

“`post.rb
class Post < ApplicationRecord validates :content, { presence: true } end ``` # 2. モデルの要件を満たせば有効であることをテスト itで始まる行の中に`post`というインスタンスをnewメソッドで作成します。この`post`のcontentカラムには「あああ」という文字列が入っています。 そして`be_valid`というマッチャを用いて、作成した`post`が有効であることをテストします。 ```post_spec.rb require 'rails_helper' RSpec.describe P

元記事を表示

ReactからRailsAPIにクッキーを送るときにはまった話

#概要
今日はReactからRailsAPIにクッキーを送信する際にはまったことがあるのでそのときにどう対処したかを簡単に説明します。フロントエンド側は簡単だったのですが、バックエンド側の方の記述に手間取ったのでメモしておきます。
cors (closs origin resourse sharing)のエラーがずっと出てしまっていました。API通信にはaxiosを使用しております。

#フロントエンド
(例)

“`typescript
axios.post(
‘http://localhost:3001/users’,
answers,
{ withCredentials: true},
)
“`

このようにしてaxiosの引数を一つ追加して、“`{ withCredentials: true}“`とするだけで良いです。
実際にCookieが送れてているかどうかはGoogleChromeの検証モードで確認できます。
[こちらの記事](https://qiita.com/ykkamm/items/258bac725f11882

元記事を表示

【Rails】Not Null制約とpresence: trueの違い【初学者の疑問点を簡潔に解説】

## はじめに
 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  _Not Null制約とバリデーション(`presence: true`)の違い_
 
 です。 

 以前、テーブル定義を考えていた際に疑問を抱きました。

## 疑問点についての解説

###結論

`Not Null制約`:データベースの項目に付与するNullに対する制約。Nullを拒否、空文字は拒否しない。
`presence: true`:モデルへのバリデーション。Null及び空文字を拒否。

###空文字とは
`空文字`: 長さ0の文字列

`Null`:何も存在していない

cf. `空白`:半角スペース、全角スペース

###Not Null制約とバリデーション(`presence: true`)は両方指定することがで

元記事を表示

【Rails】 超初心者向け!アプリケーションを作成する準備

#はじめに
私は2ヶ月ほど前からプログラミングの勉強を始めた、とてつもない初心者です。まず初めはみなさんご存知の[Progate](https://prog-8.com/)をやっておりました。ある程度履修を終えて、[現場で使えるRuby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227)を進めていました。その際に初心者すぎて困ったことをここで少しずつまとめていきたいと思います。
プログラミングの「プ」の字も理解していなかったり、元々PCの扱いが慣れていないと、とても小さいことでも分からないことがあったので、できる限り誰でも分かるように丁寧に説明していきたいなと思います。

※とてつもない初心

元記事を表示

自身のfx,仮想通貨取引の分析ができるトレードノートアプリを作成しました

# こんな感じで分析できます!
* 資産推移(これは投稿者のみ閲覧化)
[![Image from Gyazo](https://i.gyazo.com/fd6b39337d26c7f5c5bb91084a3cc233.png)](https://gyazo.com/fd6b39337d26c7f5c5bb91084a3cc233)

::: note
他にも勝率、PF、取引傾向、改善点…etc
:::

# アプリの紹介

## URL

https://trade-note.jp

## できること
1. トレードノートの作成
1. 記事の作成
1. トレードノートを元にした取引分析

# トレードノートの作成について
入力した内容は表にして示しているので見やすくなってます。
![スクリーンショット 2021-12-13 18.57.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645779/71b53bd0-ec00-848b-86ea-21cd723a15cd.png)

#

元記事を表示

! Unable to load application: Zeitwerk::NameError: expected file /var/www/~ to define constant Users::SessionsController, but didn’tの解決方法

##背景
pumaを起動させると

“`
! Unable to load application: Zeitwerk::NameError: expected file /var/www/~ to define constant Users::SessionsController, but didn’t
“`
のようなエラーが発生しました。

##解決方法
エラーの翻訳としては「アプリケーションが読み込めません: Zeitwerk::名前エラー: SessionControlerのUser定数を定義するための予期されたファイル/var/www/~ ,しかし読み込めなかった。」

Zeitwerkというのは調べてみるとrails6から導入された自動でファイルを読み込んでくれものです。それがうまく動作していなくてアプリケーションを読み込めませんということです。

(参考)
https://zenn.dev/murakamiiii/articles/893d83626c9f15

解決の仕方を調べてみると、stack overflowで以下の記事が見つかり、これを参考に

“`
c

元記事を表示

Rails お気に入り機能 解説

Rails お気に入り機能 手順 (自分用)

#中間モデルの作成
・UserモデルとBoardモデルの中間モデル(Bookmarkモデル)を作成する。
・中間モデル(Bookmarkモデル)を作成することによってuser_idとboard_idを抱えることができ、お気に入り機能を追加するに当たって便利になる。

###Bookmarkモデルの作成

“`:ターミナル
$ rails g model Bookmark user:references board:references
“`
・user_idとboard_idの外部キーが欲しいので、「user:references board:references」を付ける。

“`rb:マイグレーションファイル
class CreateBookmarks < ActiveRecord::Migration[5.2] def change create_table :bookmarks do |t| t.references :user, foreign_key: true t.reference

元記事を表示

Validation failed: 〇〇 must existエラー 解決法

##結論  
  〇〇の部分のアソシエーションに optional: true を追記してあげる

“`
class Poop < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :user belongs_to :humans, optional: true ``` # optional: trueとは __外部キーがnillであることを許可してくれるオプションです。__ バリデーションにひっからず保存されるようになります。 詳しくは下記リンクに書いてあります。 https://railsguides.jp/association_basics.html#optional #なぜこんな事が起こったか ``` def create poop = Poop.create(poop_params) if poop.save #ここのsaveでhuman_idがないために起こったエラー redirect_to r

元記事を表示

RailsアプリをEC2からECS/Fargate構成に移行してホストする【ECS準備編】

# はじめに

インフラ構成をEC2からECS/Fargateに移行した作業をまとめています。

アプリケーションのコードはRailsで記述しています。
(Nginxはまだ実装できていません…Vue実装時に考える予定です。)

RDSにはMySQLを使っていて、Railsがアクセスできる仕様です。

個人的にECS/Fargate構成で迷走してましたので、
自分が整理できるように記事を書きました。

同じように悩んでいる初学者の方の参考になれば幸いです。

# 使用技術

* ECS/Fargate(blue/greenデプロイメント)
* Rails6(Ruby2.7)
* MySQL8

# インフラ構成図 (EC2 → ECS/Fargate)

■移行前のインフラ構成
![スクリーンショット 2021-12-12 6.15.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1380401/6fb6601e-2405-9747-2520-ad1102372ce0.png)

■移行後

元記事を表示

debug.gemを使ったことがない方に向けて、いくつかの機能を紹介する

こんにちは、@yuskuboです。
本記事は [ビビッドガーデン Advent Calendar 2021](https://qiita.com/advent-calendar/2021/vivid-garden) の13日目の記事です。

# 概要
RubyKaigi 2021でRubyの新しいdebuggerであるdebug.gemが紹介されましたね!Ruby 3.1からは標準ライブラリになる予定とのことです。
ビビッドガーデンでは、これまでbyebug gemとpry gemを利用していましたが、今後のバージョンアップ対応のことも考慮してdebug.gemへ移行し、日々の業務で使っています。
本記事では、私がよく使っているdebug.gemの機能をいくつかピックアップして紹介していきます。「それ知らなかった!」や「そんなこともできたんだ!」ということを1つでもお届けできれば嬉しいです。

# 対象読者
– debug.gemをまだ使ったことないから基本的な使用方法を知りたいという方
– debug.gemは既に使っているけど`binding.break`以外は知らないから、他のコ

元記事を表示

メーカー技術者からエンジニアになってみて

人生充実してますか??

こんにちは!

エンジニアになって、過ごしている時間全てが自己投資になっていると感じている、
takaakiといいます。

26歳です。

##前職の内容
工学部を卒業後、地元の電子部品メーカーで技術総合職として、ゼネラリストをやっていました。
業務は、こんな感じ。

・新製品の開発
・製造工程の設計
・製品の性能向上活動
・品質管理

研究設備や工場に行っての業務が多かったため、毎日片道40分かけて出勤していました。

当時不満点があったかと言われると、特にありませんでした。

逆に、上司や先輩方、同期、後輩方にはとても恵まれて、

すごく幸せな環境だったな、と感じています。

##エンジニアになろうと思ったきっかけ

3つあります。

①人生において、時間と場所に縛られたくないと思ったから

②自身の市場価値を上げないと、これからの時代豊かに安定して暮らすのは苦しいと感じたから

③将来的に自身のビジネスを持ちたいと思ったから

まず1つ目。

なぜ縛られたくないか?

それは生きているうちにできるだけ沢山の経験をしたい。
そして、大切な人たちとでき

元記事を表示

RailsでGraphQL(graphql-ruby)入門備忘録

# はじめに

Ruby on RailsでGraphQLに入門してみたのでその備忘録です。

環境は以下の通りです。

– ruby: 3.0.2
– rails: 6.1.4
– graphql-ruby: 1.12
– graphiql-rails: 1.8.0

# GraphQLとは

GraphQLはAPI用のクエリ言語で、REST APIと違って以下のようなメリットがあります。

– 1つのエンドポイントのみで呼び出せる
– 欲しい情報のみを指定でき、余分なものを取得しない

# セットアップ

– [graphql-ruby](https://graphql-ruby.org/getting_started)
– [graphiql-rails](https://github.com/rmosolgo/graphiql-rails)

こちらを参考にRailsにGraphql、GraphiQLを導入していきます。
GraphiQLを導入することで、develop環境においてGUI上でGraphqlのqueryやmutaitonの設定の確認や実際に実行してテストとい

元記事を表示

【Rails】実用的!予約数の上限を設定し数字で予約を管理するロジック

初めまして!!
プログラミングを学習を開始してから初めてのPFとして実際の飲食店で使用する予約システムを作成しました!

予約システムに関してはネット上に実際に記事があり、簡単にできそう!!と思っていたのですが実際に運用するにあたり考慮する点が多々あり設計の段階から苦労しました。

今回は特に苦労した設計、ロジックについて記述していきます!!

※この技術はプログラミング初学者が独自に考えた解決策の一例です。不都合な点やより良い方法があるかもしれません。あくまで参考程度にして頂ければと思います。

# この記事で伝えたいこと
実際に使える、予約システムのロジック

## 解決したい課題
実際に使う予約システムを作成するにあたり、予約数の上限を考慮する必要がある。

## 理由

実際に運用したところ、突然、予約が殺到し一気に日に100件、1,000件、10,000件など来てしまったら?

可能性は極めて低いが起こりうる事象です。

ECサイトでも同様です。
在庫以上の注文があり決済も済んでしまっているが商品がない…など起こりうる事象です。

実際に運用するにあたり上限数の考慮は必要だ

元記事を表示

【Rails】本番環境のECSからS3へアクセスできないを解決【AWS】

## やりたいこと
本番環境でRailsからS3へファイルアップロードする時のエラーを解決したい。

## 環境
– rails 6.14
– gem ‘aws-sdk-rails’
– gem ‘aws-sdk-s3’, ‘~> 1’
– ECS(Fargate)

## 結論

https://github.com/aws/aws-sdk-ruby#configuration-options

ECSの資格情報をRailsに与えることで解決。
`app/controllers/rails_controller.rb`内の記述を以下に書き換える。

“`ruby:app/controllers/rails_controller.rb(修正後)
s3 = Aws::S3::Resource.new(
region: @region,
credentials: Aws::ECSCredentials.new
)
“`

“`ruby:app/controllers/rails_controller.rb(修正前)
s3 = Aws::

元記事を表示

railsでpostgresqlのenumを使いたい

## この記事でわかること

– Ruby on RailsでDBをpostgresql利用で開発する際に、**PostgreSQL**のEnumを利用する方法
– 結論からいうと`gem ‘activerecord-postgres_enum’`を利用します。

## まえおき

– Ruby on RailsでEnumを扱おうと思ったときに一番に思いつくのは`ActiveRecord::Enum`です。
– この`ActiveRecord::Enum`はActiveRecordがDBにINSERT or DELETEする際に、定義したEnumの文字列から整数値に変換して保存させるといった使い方が一番使われると思います
– ただ、DBで実際のデータを見たときに、`1`とか`2`が入っていてActiveRecordを介さないと一体何を表しているのかわからないので、PostgreSQLのEnumの機能を利用してデータの見やすさ改善を行っていきます。

## 手順

手順は簡単、まずはgemを入れましょう\(^o^)/
社員テーブルの性別と血液型の項目にEnumを利用してみます。

元記事を表示

Rails 多対多アソシエーションでwhereメソッドを使うと値を取ることが出来なかった話

##【問題点】
アソシエーションの設定をしてるはずなのに、whereメソッドを使うと、以下のエラーが発生する

“`shell
NoMethodError: undefined method `tasks’ for #]>
“`

## 【結論】
whereメソッドではなく、find_byメソッドを使用する。

“`shell
label = “システムテスト”
Label.find_by(label_name: label).tasks
Label Load (0.2ms) SELECT “labels”.* FROM “labels” WHERE “labels”.”label_name” = $1 LIMIT $2 [[“label_name”, “システムテスト”], [“LIMIT”, 1]]
Task Load (0.4ms) SELECT “tasks”.* FROM “tasks” INNER JOIN “taggings” O

元記事を表示

OTHERカテゴリの最新記事