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

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

【Rails】.env に定義した環境変数が反映されないときの解決方法

## はじめに
今回は、`dotenv-rails`を使って環境変数を管理していて、
`.env `に環境変数を定義して、コンソールで試したけど反映されないときに試すことを書きました。

`dotenv-rails`の設定などは以下の記事が参考になるかと思います!

https://pikawaka.com/rails/dotenv-rails

## 結論
・`spring`を再起動する
・`docker-compose`を使用している場合は、`docker-compose.yml` ファイルにも定義しているか確認する

## `spring`を再起動する
[Railsで環境変数の変更が反映されないときはspring stopを試す](https://qiita.com/metafalse/items/7294afa3d1be3315e999)
↑の記事を参考にさせていただき、試してみてください。

## `docker-compose.yml` ファイルにも定義しているか確認する
`docker-compose`を使用している場合は、
`docker-compose.yml` フ

元記事を表示

【Rails】params[:id]の:idって何?

## 今更ながらparams[:id]の:idって何?
show,edit,updateアクションが呼ばれるといきなり下記のような表現が出てきます。
“`
def show
@user = User.find(params[:id])
end
“`

この:idが何なのか、Railsチュートリアルでは以下のようにありました。
※Railsチュートリアル7章より引用
> このid: ‘1’は /users/:id から取得した値です。この値を使って
> User.find(params[:id])
> 上のコードでid=1のユーザーを検索できる、といった仕組みになっているのです

そして/user/:idの:idの部分は自動的にDBに生成されるカラムで、
以下のようにgenerateコマンドを実行した際に自動で作られる一意の値(主キー)です。
詳細はRailsチュートリアル2章を参照してください。
“`
$ rails generate scaffold User name:string email:string
“`

以上、復習までに

元記事を表示

アソシエーションした項目をselectプルダウンで並び替え

まずはモデルで関連付けを行います。
`dependent: :destroy`はbuildingが削除されたらroomも削除するといったメソッドです。
scopeメソッドを使うとコントローラで呼び出すだけで並び替えができるようになります。

“`model/building.rb
class Building < ApplicationRecord has_many :rooms, dependent: :destroy scope :latest, -> {order(created_at: :desc)}
scope :old, -> {order(created_at: :asc)}
scope :short, -> {order(station_minute: :asc)}
scope :long, -> {order(station_minute: :desc)}
“`

“`model/room.rb
class Room < ApplicationRecord belongs_to :building ``` viewでパラメーターを`pa

元記事を表示

dockerでActiveStorageを用いてS3に画像をアップロードする方法

こんにちは。今回はs3に画像をアップロードし、画像を表示させるのにかなり苦労しましたので次回からは沼らないように自分が成功した方法を備忘録として残しておきます。ここではdockerの構築方法は割愛します。

# やりたいこと
ActiveStorageを用いてS3に画像をアップロードし、画像を表示したい。

# 前提
dockerを用いてアプリを開くことができる。

# 参考にしたサイト

https://zenn.dev/kurao/articles/ce8e583450c76e

https://qiita.com/tsubasan1122/items/0171fe04754a760f7e4a

基本的にはこちらのサイトを参考にして作成した。

# つまづいたところ

## dockerfile

credentials.yml.encを編集するためにvimで編集する必要があるのですが、自分のdockerでは初期状態ではvimを開くことが出来なかったので

“`dockerfile
RUN apt-get update
RUN apt-get install vim
“`

元記事を表示

scopeとmoduleの使い分け

# はじめに
使い分けが曖昧になることが多かったので記事にまとめてみました!

scope

* URLは指定のパスにしたい、かつファイル構成は変更したくないときに使用する
* URIパターンのみをカスタマイズしたいときに使用する

| Prefix Verb | URI Pattern | Controller |
| ———– | ——————- | ————– |
| articles | /admin/articles | articles#index |
| new_article | /admin/articles/new | articles#new |

**URI Patternのみadminが付加されており、app/controllersディレクトリ配下のコントローラである**

module

* module(scope module)はURLのパスは変更したくない、かつファイル構成は指定したい時に使用
* Controller#Actionのみ

元記事を表示

Rails7でSemantic-UIを使えるようにする

## 経緯

railsの勉強を始めて3週間。Udemyのコースを見ながら、簡単なブログ形式のサイトを(なんとか)作り、次はActionCableを用いたチャットアプリの作成することに。前述のUdemyのコースでは、Rails5環境で全て実装していたのですが、ほぼ写経になってしまうのが嫌だったので、無理矢理7で作ってみることにしました。その際、フロントエンド部分で採用されていたSemantic-UIで使われるjqueryの実装でハマりました。同じようなところではまっている方がいらっしゃるようだったので備忘録としてここに残します。

## Semantic-UIは読み込めてるっぽいけど、dropdownが動かない…!
railsでsemantic-uiを使うには「semantic-ui-sass」というgemをインストールし、application.scssなどのSassファイルに、
“`application.scss
@import ‘semantic-ui’
“`

と記述することで利用可能になります。これだけで、ERBファイルにsemanticのタグを追加していけばスタ

元記事を表示

enumを利用してcheck_boxを作成し絞り込み検索を行う

## やりたいこと
railsでタスク管理アプリを作成。
enumで定義したタスクの状態を検索フォームにcheck_boxとして作成し、
絞り込み検索を行いたい。
※以下のようなイメージ
![enum check_box.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/857784/f96d2779-5701-a6c5-814e-29e8092aa2f6.png)
## 実装したこと

– **controller**
“`rb
class TasksController < ApplicationController def index @tasks = current_user.tasks. status(params[:status]) @status = params[:status] end end ``` 実際には他にも絞り込みたい条件はあると思いますが、 今回はstatusのみに絞ってます。 - **view** ```erb

元記事を表示

【Rails】開発環境で見たい情報を表示する

# 目的
Webアプリ開発中に、ページ遷移や`form_with`で送った情報が正しいかを確認することで自分が書いたコードの確認やエラー解消のヒントに繋がります。

# `debug`メソッドを使う

今回は例として`params`ハッシュを表示します。
`params`ハッシュを表示させることで、ページが持つ情報を見ることができます。

ページ内に`params`ハッシュを表示させるには、`debug`メソッドを使用します。
例えばapplication.html.erb内で下記のコードを加えることで、`params`ハッシュを取得することができます。

“`ruby:app/views/layouts/application.html.erb
<%= debug(params) if Rails.env.development? %>
“`
ここで、`if Rails.env.development?`と条件を付けることで、この式がtrueのとき、つまり開発環境のときのみ表示させています。

# 他には何を見る?

**ログイン中ユーザーの情報を見る場合**
これにより、ログイ

元記事を表示

【Rails】文字列がintegerだけで構成されているかどうかを判定する方法

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## 判定方法①

“`ruby
phone_number = ‘090-1234-5678’
nil != (phone_number =~ /\A[0-9]+\z/)
# => false

phone_number = ‘09012345678’
nil != (phone_number =~ /\A[0-9]+\z/)
# => true
“`

## 判定方法②

①よりコードをみたとき直感で分かる

“`ruby
phone_number = ‘090-1234-5678’
phone_number.match?(/\A[0-9]+\z/)
# => false

phone_number = ‘09012345678’
phone_number.match?(/\A[0-9]+\z/)
# => true
“`

## 参考

https://qiita.com/niwasawa/items/ba6c432fcc3d04fc18c9

元記事を表示

RailsでJestを試験的に導入してみた

今回Rails+Docker環境にてJestを試験的に導入してみたので、その過程をまとめていきたいと思います。ちなみにJestというのはJavascriptのテストフレームワークで、以下のリンクにある通りトレンドの上位に位置しています。
[JavaScriptテストフレームワークのトレンド比較](https://qiita.com/yudwig/items/b85c27ac98bd9308e8da)
Jestを導入してみようと思った背景として、バックエンド側では自動テストを導入しており、修正等が入った際には自動テストを回せばエラーを検知できるのですが、フロント側には自動テストはなく手動テストに頼ってしまっているので、修正等が入った際にはいちいち手動テストをやらなくてはいけず手間がかかり、エラーも検知しにくいという状態になっていると感じたからです。

### Jestをインストールしてみる
前提として私のDockerに関する知識が不足している+今回は試験的に自分のDocker環境だけで動くようにするという点を踏まえて見て頂ければと思います。既存のDocker環境にはnode.js・npm

元記事を表示

部分テンプレート

繰り返し使用するコードを切り出し、ひとつのファイルで管理するもの。

# _ 〇〇.html.erb
部分テンプレートとして切り出すファイル名は、命名規則として先頭に_(アンダーバー)をつける

_sample.html.erb

# render , partial , locals

“`ruby:test.erb
# _sample.html.erbというファイルを表示させ、hello!が代入された変数postが使えるようになる
<%= render partial: "ディレクトリ名/sample", locals: { post: "hello!" } %>
“`

render…部分テンプレートを呼び出すメソッド
partial…部分テンプレートのファイル名を指定し、表示させる
locals…記入した変数を、部分テンプレート内で使用できる

元記事を表示

オリジナルアプリ Pomodo Schedulerの開発

ソニックガーデンキャンプに参加して作成したアプリを紹介します。
ソニックガーデンキャンプとは株式会社ソニックガーデン様主催のプログラミング合宿です。
キャンプに参加したメンバーと協力してアプリ開発しました。

## アプリ概要

### アプリ名: Pomodo Scheduler
https://pomodo-scheduler.herokuapp.com/

ポモドーロテクニックとタスク記録機能を組み合わせたタスク管理アプリです。
ポモドーロテクニックで時間を有効活用しつつ、実行したタスクをマイページから確認できます。

### アプリを使うことで得られるメリット
* **時間を効率的に使える**
時間を効率的に使うために**ポモドーロテクニック**をアプリに組みました。
ポモドーロテクニックとは、タスクを細かく分解し、短い作業時間(25分)と短い休憩(5分)を繰り返すことで、集中力と生産性を高める時間管理テクニックです。
自分自身、ポモドーロテクニックを使っているおかげで、長く集中力を保つことができているので、アプリに組み込みたいと思いました。

* **時間を節約できる**

元記事を表示

【Rails】chartkickを使用してシンプルなグラフを扱う

※rails6を使用しています

# chartkick とは
Railsで簡単にグラフを作成することができるライブラリです。
Railsで使用することが主な目的のようですが、多言語(React, Vue.js, Ruby, Python, Elixir, and Clojure)でもグラフを作成することができます。
github [chartkick](https://github.com/ankane/chartkick)

https://chartkick.com/

![Line_chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730527/eb4724cf-a04d-695b-b92b-272052504fae.png)
![area_chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730527/401b2bd8-a834-0bbb-2228-bf9097426d17.png)

他に

元記事を表示

(Rails)carrierwave【ファイル名のみ表示方法】

carrierwaveでのファイル名のみの指定方法について

“`
cost[:costsfile]
→test.xlsx

cost.costsfile
→/uploads/cost/costsfile/16/test.xlsx
“`
・”[:~]”なのか”.~”によって異なる。
・ネットで検索してみてもこのような内容がないためログとして投稿。

元記事を表示

フリーランスのエンジニアならフルリモートで年収1000万円は十分に可能では?

# 時給何円なら年収1千万円になるのか?

時給6000円でフルタイムで働くだけで年収1千万円を超えそうだ。

年間240時間 * 時給6000円 * 8時間 = 11,520,000円

時給5000円でもそれに近くなる。( 9,600,000円 )

# 個人的な根拠

– フルリモートの正社員で月額70万円/年840万円で働いていた時期がある。(フリーランス価値にして1.5倍計算すれば、1千万円超えとなる)
– クラウドワークスに登録していたらフルリモートで時給6000円以上の案件での募集が来た。
– Twitterで時給5000円以上のフルリモート案件に参加の話が決まりそうだったことがある。(他社に就職したので実現はしなかった)

# 参考: クラウドワークスでのメッセージ

“`

お世話になります。
***株式会社と申します。

現在、Ruby on Railsエンジニアを探している中で、
下記案件にマッチするかもしれないと思い、
この度ご連絡させて頂きました。
ーーーーーーーーーー
▼案件概要
数百万人のユーザが利用する国内最大級の***の
企画・開発・運用をしている

元記事を表示

ポートフォリオで使用したGem一覧

Railsポートフォリオで使用したGemの一覧です。

|Gem名 |使用目的 |説明|
|—|—|—|
|devise|ログイン機能
|carrierwave |画像アップロード用
保存先は開発環境はローカル、本番環境はS3に設定 |DBを圧迫させないためにファイル名をDBに保存している。画像表示は、画像が格納されてるパスとDBに保存されているファイル名を使用|
|fog-aws |S3に保存用
|dotenv-rails |環境変数を設定|プロジェクト配下に.envファイルを作成し、ファイル内に環境変数を記入し、ENVで呼び出す
|ransack|検索機能の実装用|
|kaminari|ページネーションの実装用|kaminari-bootstrapを使うと簡単に綺麗なページネーション作成可能
|rspec-rails|テスト用
|factory_bot_rails|テスト用のデータを生成してくれる
|pry-rails|デバッグツール|処理の確認したい箇所にbinding.pryを入れて値など確認できる
|rubcop-airbnb|Rubyコードの自動

元記事を表示

devise導入

devise導入の基礎的なフローについての備忘録です。

## 導入手順

Gemのインストール

“`ruby:gemfile
gem ‘devise’
“`

deviseの設定ファイルを作成

% rails g devise:install

deviseコマンドでモデルを作成

% rails g devise モデル名

deviseのビューファイル作成

% rails g devise:views

## データベースにカラムを追加する場合

% rails g migration Addアッパーキャメルでカラム名Toファイル名 カラム名:データ型

## deviseで追加したカラムに値を保存する処理

deviseの処理を行うコントローラーはGem内に記述されているため、編集ができない。
よって、deviseのコントローラーにストロングパラメーターを反映するために、全コントローラーの共通処理ができるapplication_controller.rbにdeviseのストロングパラメーターを定義する。

“`ruby:ap

元記事を表示

renderとredirect_toによる画面遷移について

# 概要
* create、update、destroyアクションではビューファイルを作成しないことが多い
* そのため上記のアクションで画面遷移先を決めるために、redirect_to, renderを用いる
* 新規投稿, 編集, 削除した際は、以下のいずれかの方法で指定されたビューを表示させる

**redirect_to**

![](https://i.imgur.com/p4FkFbS.png)

**処理の流れ**
1. redirect_toがルーティングにURLを送る
2. ルーティングと送られてきたURLとHTTPメソッドを照らし合わせて、どのコントローラのどのアクションを実行するかを決める
3. アクションを実行する
4. ビューを表示する

**render**

![](https://i.imgur.com/3nBtq86.png)

**処理の流れ**
1. renderで定義したビューファイルを表示する

renderが裏で動いているのはたったこれだけです

# 違いと注意点

**renderとredirect_toの大きな違いを

元記事を表示

カラム追加、削除コマンド

# 環境
ruby 2.6.3p62
Rails 6.1.5
* * *

## カラムの追加コマンド
“`
$ rails g migration Addカラム名Toテーブル名 カラム名:型名
$ rails g migration AddNameToLists name:string
“`
カラム削除コマンド
“`
$ rails g migration Removeカラム名Fromテーブル名 カラム名:型名
$ rails g migration RemoveNameFromLists name:string
“`

元記事を表示

RDBのユニーク制約とRailsのユニークバリデーションの違いを理解しよう

Railsアプリケーションで下記のusersテーブルのemailにユニーク制約をつけたい場合、どのように実装しますか?

* users

| Field | Type | Null |
|:———–|:————|:————-|
| id | bigint(20) | NO |
| email | varchar(255)| NO |

だいたいの場合、下記2つのいずれか、または両方を実装するのではないでしょうか?
* RDBのemailカラムにユニークインデックスを付ける
* Userモデルにuniqueness validationを実装する

どちらの実装でもデータがユニークであることとをチェックしてくれるという意味では同じように感じますが、制約の完全性が全然違います。
一言で言うと、RDBのユニーク制約は100%保証されるが、Railsのuniquenessは突破される可能性があります。

# この記事で使うユニーク制約

記事の最初に記載したusersテーブルを使

元記事を表示

OTHERカテゴリの最新記事