Rails関連のことを調べてみた2022年05月15日

Rails関連のことを調べてみた2022年05月15日

authenticate_user!メソッドの使い方

## どんなメソッドか?
ログイン状態によって表示するページを切り替えるメソッドです。
ログインしていないユーザーを、ログイン画面に遷移したい場合に使います。
before actionで呼び出すことにより、コントローラーのアクションを実行する前に、ユーザーがログインしていなければログイン画面に遷移することができます。

“`ruby
before action authenticate user!
“`

## onlyの後にアクションを指定した場合の例
“`ruby
before action authenticate user!, only: [:new, :edit]
“`
上記の場合、ログインしていないユーザーがnewアクションとeditアクションを実行した場合のみ、ログイン画面に遷移することができます。
only以外にもexpectの後にアクションを指定することで、ログインしていないユーザーが指定したアクション以外を実行した場合に、ログイン画面へ遷移させることもできます。

元記事を表示

Docker を使ってRuby on Railsの開発環境を構築(M1チップのMac)

M1 Macbookを使ってポートフォリオを作ろうと思い、Virtual Boxで開発環境を作成しようとするとVirtual Boxが使えないことが発覚したので、Dockerを使って開発環境を構築しようとした。

しかし、色んなサイトの作成方法を真似しても上手くいかず、Dockerの公式ドキュメントを参考にしたところ、Yay! You’re on Rails!の画面を出すことができた。

手こずってしまった原因がDockerへの理解不足だったため基本的な概念を備忘録として記載しようと思う。
表現が不適切なところも多々あると思うので、ご指摘くだされば幸いです。

まずはイメージ図を頭に入れる

![スクリーンショット 2022-05-14 22.31.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654361/101cda71-0ae6-cd6a-73d0-219009c17c04.png)
引用
https://coinbaby8.com/docker-beginner.html

イメージとい

元記事を表示

【Rails 6】ActiveJob + S3 + Lambda + Slack で実現する非同期 CSV ダウンロード

## 概要

– 大容量の CSV を出力をしようとした際、レスポンスが返ってくるまでの待ち時間が苦痛
– 最悪、タイムアウトエラーになりかねない
– とりあえずレスポンスだけ先に返しておき、実際の CSV 出力処理はバックグラウンドで非同期処理するみたいな事がしたい
– ActiveJob + S3 + Lambda + Slack を使う事でそれが実現できそう

軽めの CSV 出力であれば何ら問題無いのですが、サービスの運用が長続きしてたくさんのデータが蓄積すると、それらを一気に出力するのはなかなか骨が折れたりします。

実際、自分が担当しているサービスでも先日ついに処理に時間がかかりすぎてタイムアウトエラーになるといった事象が発生しました。

もちろん、 SQL の見直しだったり根本的な部分においては他にも色々やるべき事はあるかもしれませんが、とりあえず手っ取り早く対応するために非同期での CSV ダウンロードを実装してみました。

### 同期処理の場合

![同期.gif](https://qiita-image-store.s3.ap-northeast

元記事を表示

入社2週間の新人が研修で社内アプリを作った話

## 導きのはじまり
部門長「研修の一環として、社内で実際に運用するアプリを作ってもらおうと思う」

僕「え・・・? 研修なのに実際に使うものを作るんすか? まだ入社して2週間なんですが・・・」

部門長「実際に運用するものを作るから研修になるんだよ? 多少バグってもいいから動くものを作ろう!」

僕「oh…」

部門長「じゃあ、どんなアプリにするか一緒に考えていこうか」

## 自己紹介

みなさん初めまして。
エンジニア1年目の小林と申します。

この記事を見てくださっている方々の中には、エンジニアに転職しようと悩んでいる方、エンジニアの新人研修って何をするんだろうと思っている方はいませんでしょうか?

ここでは、僕が今の会社にエンジニア転職して、最初の研修で行ったことをご紹介します。
新人研修の一モデルとして参考になれば幸いです。

## ****開発環境****
Ruby on Rails
## ****この記事の対象読者****

・エンジニアに転職しようと考えている方
・エンジニア転職のために勉強中の方

## 入社前 ~勉強編~
### 著者のスペック
・年齢26歳

元記事を表示

新規Railsプロジェクトの作成〜localhostに接続するまで

毎回手順を調べては忘れるので、備忘録。
# 1.Railsをインストールする
“`
$ mkdir rails-tutorial
$ cd rails-tutorial
$ bundle init
Writing new Gemfile to /Users/hogehoge/rails-tutorial/Gemfile
“`

作成されたGemfileを編集。railsのコメントアウトを外す。
“`diff_ruby:Gemfile
# frozen_string_literal: true
source “https://rubygems.org”

git_source(:github) {|repo_name| “https://github.com/#{repo_name}” }

– # gem “rails”
+ gem “rails”
“`

“`
$ bundle install –path vendor/bundle
“`
# 2.Railsプロジェクトを作成する
今回はDBをMySQLにして作成。
“`
$ bundle exec rails new

元記事を表示

railsチュートリアルをなるべく嚙み砕く 1章

今まで何回かチュートリアルに挑みましたが全て挫折しました。
挫折した原因は

###### なんとなくの理解で進めてしまった。

これが原因でモチベーションの低下が始まり、挫折というルートを何回も辿っています
今回こそは全部やりきるために、自分なりに噛み砕いて理解し、
###### 人に説明できるようになったら進む
ことを意識してやりたいと思います

他の方のための記事にもなったらいいな、、
##### 解釈が間違っているところがあれば教えていただきたいです!!

# 第一章

環境構築ですね
私は ubuntu on Windowsを使ってrailsの環境構築をしました

https://qiita.com/ksh-fthr/items/64a4e86c8bad08322c94

こちらの記事が私が環境構築したやり方と同じです

1.3まで飛ばします

### 1.3
ここで
cd やmkdirが出てきます。
主要なUnixのコマンドたちですね
cd は change directory の頭文字をとったもので ディレクトリを移る
mkdir は make directory の略で

元記事を表示

cannot load such file — sasscエラーについて

本日も頑張っていきましょう。宜しくお願いします。

こんなエラーが出ました。
![スクリーンショット 2022-05-14 11.35.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607524/919f091c-899c-dc75-4afe-b8192e41f5bc.png)

どうやらこれはRails7以降で起きるエラーのようです。
従来通りにCSSを呼び出すとこのエラーが発生するようです。

以下対応をすると解決できるようなので試してみます。

“`gemfile.qiita.rb
# gem “sassc-rails”
“`

この、コメントアウト(#)を削除して、ターミナル上で
「bundle install」を実行してみます。

無事、エラーが解消されました!

元記事を表示

accepts_nested_attributes_for を使ったフォームで意図しないユニークバリデーションの発生を回避する方法

## 解決したい問題
Railsでは `accepts_nested_attributes_for` を使って、`has_many`関連する子レコードを1つのフォームで更新することができます。
イメージとしてはこんな感じです。

![sample.002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/fbd1d0e0-3c36-dcaf-715c-a787fbce39b4.jpeg)

上の画面では以下のようなBookモデルと、それに関連するAuthorモデルを更新するフォームです。
(本と著者はmany-to-many関連だろう、というツッコミが来そうですが、説明のために単純化してるので気にしないでください)

“`ruby
class Book < ApplicationRecord has_many :authors, dependent: :destroy accepts_nested_attributes_for :authors, reject_if: :all_bl

元記事を表示

開発勉強(controller)

今回も頑張っていきましょう。

今日は、前回なんとかサーバーの立ち上げまでできたので、実際に開発に向けて勉強していきます。

⭐️ MVC
  ・Railsは「MVC」というアーキテクチャーを使ったフレームワーク
  ・MVCというのは、「Model」「View」「Controller」の略
  ・この3つの中で最も重要なのは「Controller」
  
⭐️ コントローラーを作成する
  ターミナル上で前回作成したRailsAppへ移動し、以下コマンドを実行する
“`ruby:qiita.rb
rails g controller 名前
“`
  ※名前は半角英字とすること
“`ruby:qiita.rb
create app/controllers/hello_controller.rb
invoke erb
create app/views/hello
invoke test_unit
create test/controllers/hello_controller_test.rb

元記事を表示

herokuでsecret_keyを使う

## はじめに
アプリをherokuにデプロイし、ログイン機能を使用しようとしたところ、このようなエラーが出ました

JWT::DecodeError (No verification key available)

この解決方法を共有いたします。

## 結論
herokuにマスターキーを登録するのを忘れてたので、追加しました。

heroku config:set RAILS_MASTER_KEY=`cat config/master.key`

### 発生状況
ログイン認証でJWTを使って、デコードする際に、`Rails.application.credentials.secret_key_base`を使っています。
この値がnilとなっており、エラーが発生しておりました。

def decode(token)
JWT.decode token, Rails.application.credentials.secret_key_base
end

そもそもこれは、credentials.yml(公開鍵)の値をmaster.key(秘密

元記事を表示

【M1Mac】【Docker】環境構築で nokogiri のエラー対処方法

## はじめに
未経験からエンジニアに転職しました。
まだまだわからないことだらけですが、毎日楽しく働いています!
業務や個人開発での発見やエラー解決などをアウトプットしています。
今回は、
M1 Macの環境構築で遭遇したエラーの解決方法です。
Docker Rails 環境を想定しています。

# エラー内容
~~~
Caused by:
LoadError: Error loading shared library ld-linux-aarch64.so.1: No such file or directory (needed by /usr/local/bundle/gems/nokogiri-1.13.3-aarch64-linux/lib/nokogiri/2.6/nokogiri.so) – /usr/local/bundle/gems/nokogiri-1.13.3-aarch64-linux/lib/nokogiri/2.6/nokogiri.so
~~~

~~~
rake aborted!
LoadError: cannot load such file —

元記事を表示

コンテナ用語についてまとめてみた

# コンテナ用語

## コンテナ

– OSとカーネルは共有し、プロセスを分離する仕組み。
– コンテナ上で実行されたソフトウェアは単に1つのプロセスとして稼働しているにも関わらず、コンテナ内のソフトウェアから見ると独立したOS環境を占有しているように見える。

### コンテナ vs サーバー仮想化

– サーバー仮想化は複数のOSを同一のハードウェア上で実行する仕組み。
– 「仮想マシン」上に「ゲストOS」を動作させる。
– 例: Virtual box

[サーバー仮想化技術の基礎 – Qiita](https://qiita.com/NagaokaKenichi/items/123c54f3863816481bd7)
[各仮想化技術の違いをざっと理解するッ!! – Qiita](https://qiita.com/hiroki-it/items/0cea21a83394634d284a)
[[Cloud] 仮想化技術について](https://qiita.com/okkn/items/c0cb6feef4058e9d16b4)

### コンテナのメリット

元記事を表示

【超簡単】Ruby on Rails に BootStrapを導入する方法

# はじめに
筆者は [大学生限定 プログラミングコミュニティ 『GeekSalon』](https://geek-salon.com/?utm_source=Direct&utm_medium=attract&utm_campaign=2Q&utm_content=Fukuoka_E_2Q)で活動している者です!

# Bootstrapとは
世界で一番人気のあるフロントエンドライブラリです。
モバイルファーストなレスポンシブウェブを素早くデザイン・カスタマイズすることが可能です。
豊富なコンポーネント、強力なJavaScriptプラグインを備えています。
詳しくは、[Bootstrap公式サイト](https://getbootstrap.jp/) を!!
## Ruby on Rails への導入方法
①まずは[Bootstrap公式サイト](https://getbootstrap.jp/)へアクセス!
②サイト内のはじめるボタンをクリック!
![スクリーンショット 2022-05-13 23.36.54.png](https://qiita-image-store.s3

元記事を表示

content_forメソッドでタイトルを動的に出力する

タイトルを動的に出力したいのでyieldメソッドとcontent_forメソッドをうまく利用する。
content_forメソッドを使うことでヘルパーメソッドが利用できるので、動的にタイトルを出力することができる。

まずは簡単にyieldメソッドとcontent_forメソッドの使い方を説明していく。

### content_for
content_forは表示したいコンテンツを設定するのが役割。
content_forの公式
“`erb
<%= content_for :コンテンツ名 do %>
コンテンツ
<% end %>
“`
具体例を用いて説明していく。
“`erb
<%= content_for :title do %>
トップページ
<% end %>
“`
コンテンツ名を:titleとした。そしてコンテンツはトップページとする。
content_forでは表示したいコンテンツをdo~endで囲む。
ここでいうコンテンツはページのタイトルとして表示したい文字列を設定。

### yield

yieldの公式

“`
yield(:コンテン

元記事を表示

Rspecにおける画像検証の方法

画像がちゃんと表示されているか検証するテストを書いている時にやり方がわからずハマってしまったので登録のやり方から検証方法までを書いていく。

## letで画像を登録する

テストで使用するディレクトリに画像ファイルを置き(例では/spec/factoriesに”image_1.jpg”という画像ファイルを置いている)File.new(“#{Rails.root}/画像のパス)でデータを登録する

“`ruby
let!(:user) { create(:user, name: ‘user_1’, image: File.new(“#{Rails.root}/spec/factories/image_1.jpg”)) }
“`

## フォームに画像を入力する

“attach_file”を使い画像登録の状況を再現する。name属性、ファイルのパス(上の例と同じディレクトリにあるファイルを指定している)を指定することで画像の投稿を再現することができる

“`ruby
attach_file ‘フォームのname属性’, “#{Rails.root}/spec/factories

元記事を表示

Rspecを書くときに注意していること

Rspecを書くときの自分なりの決まり事、というかこうした方が読みやすくなるんではなかろうかということをメモがわりに書いてく。これからもちょいちょい足していく & これ違うなと思う部分は修正していく。

## 戻り値を明確にする

“`ruby
let!(:hoge) do
huga = create(:hoge, name: ‘name’, user: user)
hoge.update(updated_at: Date.new(2018, 7, 1))
hoge # 戻り値
end
“`

最後のhogeがなく、hoge.updateで終わってしまうと戻り値が何なのかが判断しづらいので「hoge」を最後に記述し戻り値を明確にする

## 凡庸的なクラス属性を指定するときは「within(’.someClass’) do」を使い対象を絞る

“`ruby
page.all(‘.btn’)[1].click
# 対象が広すぎるのでページに新いbtnクラスが追加されたときにテストが通らなくなる恐れがある

within(page.all(‘.shops’)[1]) {

元記事を表示

rails5 progate 整理メモ

# ログイン失敗時のメッセージを表示させる
送信されたパラメータにあうユーザーがない場合にメッセージを表示させる。
その時にお題のメッセージを表示させる
## どうやってエラーメッセージを表示させるのか忘れた。
ちょっと答えを見た。
“`users_controller.rb
def login
.
.
.
else
@error_messeage = “メールアドレスまたはパスワードが間違っています”
render(“login”)
end
end
“`
loginページに行く前にインスタンス変数に代入しておく。そうすることで中身を入れることができる。
“`rb
<% if @error_messeage %>
“`
@error_messeageに中身があれば表示されるようにする。

“`login.html
<% if @error_messeage%>

OTHERカテゴリの最新記事