Rails関連のことを調べてみた

Rails関連のことを調べてみた

Railsで環境変数が読み込まれない? .envファイルのトラブルシューティングと解決方法

## Railsで環境変数が読み込まれない? `.env`ファイルのトラブルシューティングと解決方法

### 目次
1. [背景](#背景)
2. [コントローラーでの環境変数の利用](#1-コントローラーでの環境変数の利用)
3. [私が試したトラブルシューティング手順](#2-私が試したトラブルシューティング手順)
– [Railsコンソールで環境変数を確認](#railsコンソールで環境変数を確認)
– [APIキーの有効性を確認](#apiキーの有効性を確認)
– [現在のRails環境が`dotenv`を反映する設定になっているか確認](#現在のrails環境がdotenvを反映する設定になっているか確認)
– [Gem ‘dotenv-rails’がインストールされているか確認](#gem-dotenv-railsがインストールされているか確認)
– [サーバーの再起動を試行](#サーバーの再起動を試行)
4. [解決策:サーバーの再起動](#3-解決策サーバーの再起動)

### 背景

Railsアプリケーションの開発中、コント

元記事を表示

Railsのparamsとは

# paramsとは
paramsとは**リクエスト**が発生した際にroutes、Controllerに渡されるパラメータ。

`params[:id]`などで、Viewからroutesを通り、Controller側に渡される。
なお、`config/routes.rb`では、このように書かれている。
“`
get ‘users/:id/articles’, to: ‘articles#show’, as: ‘user_articles’
“`
これの`:id`がそう。
Controllerには`params[:id]`と書いてidを取得できる。

# リクエストとは
リクエストはクライアント側がサーバー側に何かこれがほしいと要求をしサーバー側がそれに対してレスポンスをするときに発生しているあれ。

レスポンスをするということはクライアントが**何のリソースが欲しいか**を特定する必要がある。
なので、クライアント側が特定をするための最低限の情報を渡さなければならない。

最低限の情報とは、例えばデータベースで言うとidだったり、user_idだったり。

idさえあれば、データ

元記事を表示

RailsでJavascriptを使用して動的セレクトフォームの作成

# はじめに

現在友人依頼の作付計画アプリケーションの作成中です
今回はJavascriptを使用して動的なセレクトフォームを作成したので
アウトプットします✍️

間違えているところ等ございましたら、ご指摘いただけますと幸いです🙇

# 完成図
畑名を選択すると、畑名に関連付けられた区画名が出てくるようにしています!

[![Image from Gyazo](https://i.gyazo.com/83145a3b2e1498d16452466f0721c0c9.gif)](https://gyazo.com/83145a3b2e1498d16452466f0721c0c9)

イメージ的には都道府県がわかりやすく、都道府県=畑 市町村=区画 作付計画はプロフィールの出身地といったところです!下記の記事が大変分かり易かったです!

# ER図

erbの<% %>を楽に入力する【VSCode】

# はじめに
`erb`を使う時、`<% %>`や`<%= %>`の入力が手間ですので、解消します。
# 環境
| | |
|:-:|:-:|
| エディタ | VSCode |
| 言語 | erb(html系 拡張子 なら応用可能)|
| | |
# やりたいこと
“Emmet”のように、shorthandで`<%%>`を呼び出せるようにします。

“Emmet”についてはこちら

https://qiita.com/kohki_takatama/items/ec0bec86277bf90f94eb

# 実装手順
VSCodeで行ってください。
| `ctrl + shift + P`で設定を開く | snippetを検索し、開く |
|:-:|:-:|
|![スクリーンショット 2024-08-22 13.01.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/91cc29e4-749d-2821-1bb2-9c06aacbeefa.png)|![スクリーンショット

元記事を表示

CarrierWaveでアップロードしたCSVファイルをダウンロードする備忘録

### はじめに
CarrierWaveを使用してアップロードしたcsvファイルをダウンロードする機能を実装したのでその備忘録として残そうと思います。

### コントローラーの実装

コントローラーのコードは下記の感じで書きます。

“`ruby:hoges_controller.rb
def export_csv
@hoge = Hoge.find(params[:id])

if @hoge.csv_file.present?
send_file @hoge.csv_file.path, type: @hoge.csv_file.content_type, disposition: ‘attachment’
end
end

private

def hoge
params.require(:hoge).permit(:csv_file)
end

“`

#### send_fileメソッド
クライアント(ファイルを要求しているユーザーのブラウザ)にファイルを送信
##### path: 送信

元記事を表示

method: deleteが効かない時の対処法

# はじめに

本質的な理解ではなく、あくまで対処法にとどまります。

:::note
対処法
`@rails/ujs`をyarn add -> install
:::

# 問題

deviseを使って「ログアウト」を実装しようとしたところ、`method: delete`を設定しているにも関わらず、`get`リクエストでページ遷移してしまい、該当のrouteは存在しないと言われる

# 対処法

method: deleteはJSライブラリによって管理されているようです。

今回は、JSライブラリ`@rails/ujs`を yarn add -> install で解決しました。

# 問題が解決しなかった理由

「rails立ち上げの際に **esbuild** を指定しているにも関わらず、**importmap** に関連した解決を試みたから」

本質的な理解ではありませんが、「esbuild」「webpacker」「importmap」が同じレベルのものらしいです。
よって、「importmap」と「esbuild」がコンフリクトを起こしてしまったのが問題を複雑にしていました

元記事を表示

【Rails】Rspecでスタブを使用してdestroy失敗時のテストを行う

## はじめに
Rspecでdestroyアクション失敗時のテストを書くときに少し詰まったのでメモを残す

## 実現したいこと
メモに紐づくコメントの削除に失敗したときのテストをしたい
“`Ruby
def destroy
memo = Memo.find(params[:memo_id])
comment = memo.comments.find(params[:id])
if comment.destroy
head :no_content
else
render json: { errors: comment.errors.full_messages }, status: :unprocessable_entity
end
end
“`

存在しないメモで404を返すケースなどは、idを0のコメントに対してリクエストを送るなどすれば良いが、422のケースはどうすれば良いのか?

## スタブを使う
#### スタブとは?
> 「スタブ」とは、テスト対象から見た下位モジュール(呼び出される側)に成り代わる

元記事を表示

eachメソッドを使わないで繰り返し処理

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## eachメソッドを使っていないのに一覧を作成できるのはなぜか
“`
<% if @example.present? %>
“`
このコードのように、複数の要素に対して存在するかどうかのメソッドは繰り返し処理がされる。
繰り返すためのメソッドであるeachを使わなくても繰り返し処理ができる。

元記事を表示

Rails7のTurboが原因でリダイレクト後にjsが動かなくなる

## 概要
Turboが有効なRails7にて、削除処理を行った後リダイレクトするとjsが聞かなくなってしまった。

## 元のコード

“`erb:erb
<%= link_to '削除する', users_memo_path(@memo.id), data: { turbo_method: :delete }, class: 'delete-button button' %>
“`

“`ruby:controller
def destroy
memo = Memo.find(params[:id])
memo.destroy if memo.user_id == current_user.id
redirect_to users_memos_path, status: :see_other
end
“`

“`js:js
document.addEventListener(‘DOMContentLoaded’, function() {
// 既存の処理
});
“`

## 成功した方法
Turboが読み込まれた際にjsを実行するよ

元記事を表示

慣れないデザインパターンを導入して失敗した話

# 概要
– 筆者が興味本位で使いたくなったデザインパターンを稼働中のプロダクトに導入してみた
– 導入して約1年後、当該プログラムは存在しているが、同じデザインパターンが他のチームメンバーに使われることがなく、プロダクトコードの中でひとつだけ浮いた状態になった
– 振り返ってみると、あまり分かりやすくなくて、書いた本人でさえも書き直したくなってしまった

という話です。

# 発端
某金融システムのバックエンド開発を行なっています。プロダクトコードはRailsで書かれています。
筆者宛ての仕事として、ユーザーからのリクエストをControllerで受け取り、もろもろバリデーションチェックの後、テーブルAのレコードを更新、テーブルB、テーブルCのレコードをそれぞれ1件づつ追加したい、という要件の実装を担当することになりました。
考えられる実装パターンは以下のようなものでした。

#### 選択肢1: そのままControllerに書く
“`ruby
class HogeController < ApplicationController def create # もろもろ

元記事を表示

RubyMine 2024.2 がリリースされました!

## 皆さん、こんにちは!

新しいバージョンの RubyMine が利用可能になったことをお知らせします。弊社の[ウェブサイト](https://www.jetbrains.com/ruby/download) や無料の [Toolbox App](https://www.jetbrains.com/toolbox-app/)、あるいは Ubuntu 用の [snaps](https://snapcraft.io/rubymine) からダウンロードできます。

RubyMine 2024.2 からは、IDE を中国語、韓国語、日本語で使用する場合に言語サポートプラグインをインストールする必要がなくなります。これらの言語パッケージが IDE に最初から同梱されるようになりました。

もう一つの大きな改善点は、新しいUIがRubyMine 2024.2でデフォルトになったことです。詳細は[専用のブログ記事](https://blog.jetbrains.com/blog/2024/07/08/the-new-ui-becomes-the-default-in-2024-2/)をご覧くだ

元記事を表示

NoMethodError: undefined method `chrome’ for Selenium::WebDriver::Remote::Capabilities:Class ってなエラーが出た場合

6.1のサポートがぁぁぁあということで、7.0へ引っ越し作業中に

“`
NoMethodError: undefined method `chrome’ for Selenium::WebDriver::Remote::Capabilities:Class
“`

ってエラーが発生

“`
Capybara.register_driver :chrome_as_pc do |app|
caps = Selenium::WebDriver::Remote::Capabilities.chrome(
loggingPrefs: { browser: “ALL” },
chromeOptions: {
w3c: false,
args: [
“no-sandbox”,
“headless”,
“disable-gpu”,
“window-size=1200,800”,
“user-agent=Mozilla/5.0 (Windows NT 5.1) Apple

元記事を表示

Ruby Gold模擬試験アプリを作成しました!

# Ruby Gold模擬試験アプリを作成しました!

## はじめに

こんにちは!Rubyが大好きで、将来は日本でRubyエンジニアとして働くことを夢見ている者です。現在、就職活動を進めていますが、自分のRubyへの情熱を言葉だけでなく行動で示したいと考えました。

## Ruby Gold試験への挑戦

そこで、Ruby技術者認定試験(Gold)の受験を考えました。しかし、調べてみると、この試験は日本国内での対面試験のみだということがわかりました。現在中国に住んでいる私にとって、これは大きな壁でした。

## オープンソースの模擬試験リソース

幸いなことに、GitHubで素晴らしいリソースを見つけました。Ruby Associationが公開している[模擬試験問題](https://github.com/ruby-association/prep-test/blob/version3/gold_ja.md)です。これは本当に助かりました!

## Webアプリケーションへの発展

模擬試験問題を解いていくうちに、ふと思いつきました。「これをWebアプリケーションにしたら、世界中

元記事を表示

本番環境でRailsコンソールを開くコマンド

いつも忘れて30分ほど時間を浪費するので備忘録
しかもちょっと違うと全然開けないのが結構きつい。

# 本番環境でRailsコンソールを開く
“`
RAILS_ENV=production bundle exec rails c
“`

## RAILS_ENVは前
`RAILS_ENV=production`はどちらにせよ末尾につけるのではなく、前につける

## rails ではなくて bundle exec rails
`rails c`で開こうとしても開けない。
`bundle exec rails c`を使い開く。

元記事を表示

No route matches [POST] “/posts/new”エラーについて

復習のため、投稿機能を作成しようとしたところ、上記のエラーが出たので、解決方法をまとめます。

・ログイン後のユーザーが、投稿を行えるようにしたい
・sorceryを導入し、ユーザー登録機能は実装済み
・userとpostのデータの関係は、1対多である。

コードの内容
“`routes.rb
Rails.application.routes.draw do
root ‘top#index’
get ‘login’, to: ‘user_sessions#new’
post ‘login’, to: ‘user_sessions#create’
delete ‘logout’, to: ‘user_sessions#destroy’
resources :posts
resources :users
end
“`
“`models/post.rb
class Post < ApplicationRecord belongs_to :user, dependent: :destroy validates :user_id, presence: tru

元記事を表示

docker + carrierwave + amazon S3環境の画像アップロードで発生したエラーと対策

## 発生事象

前提として、開発環境では問題なくAWSに画像アップロードされている事が確認取れていた状態で以下の事象が発生していました。

### 1: デプロイ出来ない問題
・環境変数がデプロイ時に定義されていないと言われ、デプロイ失敗する状況が発生。

### 2: 本番環境でAWSに画像アップロード出来ない問題

・本番環境にて画像アップロード時にエラーが発生し、アップロード出来ない状況が発生。

## 結論
1,2の事象の原因は、dockerfileの設定でした。

## 実行環境
本番環境:`dockerfile`
開発環境:`dockerfile.dev`

初めてのdocker環境構築であったため、所属スクールの環境設定資料を参考に`dockerfile.dev`を作成して使用。

しかし、初期の環境構築のタイミングで、`dockerfile.dev`とは別に`dockerfile`というファイルも作成した(らしい)。
正直な話、`dockerfile`作成した記憶が無く、いつの間にか`dockerfile`をメインで使用していると錯覚していた。

最初のこの時点で

元記事を表示

パーフェクトRubyonRails備忘録6

# ActiveStorageによるファイルアップロード

– 実装
– ActiveStorageの有効化
– 以下を実行
– `rails active_storage:install`
– ActiveStorage用属性をモデル作成時に宣言する
– `rails g scaffold user name portrait:attachment`
– `portrait:attachment`部分がActiveStorage用属性の宣言
– 生成されたモデルには以下の記述が追加されている

“`ruby
class User < ApplicationRecord has_one_attached :portrait # 追加部分 end ``` - 注意として、Usersテーブルにportraitはカラムとしては無く、他のテーブルとして管理されている。

元記事を表示

[個人開発・本リリース] 完全未経験が冷蔵庫の中身を簡単管理できるサービスをリリースした件

## はじめに

こんにちは。ryosuke([@ryousuke_mogurA](https://x.com/ryousuke_mogurA))と申します。現在プログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

前回MVPリリースしたアプリを本リリースしたので新たな記事を書くことにしました。
技術的な部分での誤りやサービスについての感想などありましたら、コメント等で教えていただけると助かります。
## 目次
[1.作成したサービスの紹介](#サービスの紹介)
[2.作成した経緯](#作成した経緯)
[3.技術スタック](#技術スタック)
[4.こだわったポイント](#こだわったポイント)
[5.画面紹介](#画面紹介)
[6.ER図](#ER図)
[7.実装機能](#実装機能)
[8.今後の展開](#今後の展開)
[9.反省点](#反省点)
[10.感想](#感想)

## サービスの紹介
[![Image from Gyazo](https://i.gyazo.com/385a7078b695448cfef79567d7cd142b.jpg

元記事を表示

link_toメソッドで生成されるアイコンや文字にスタイルを適用する

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## 書き方
“`
<%= link_to "sample", xxx_path, id: id番号 %>
“`
このようにID属性を作成することでCSSやjavascriptのスタイルを適用できる。

## どうしてidの番号を指定するのか
番号を指定しない場合、一覧など複数のボードがある時、複数のボードに同じIDが適用されることになるため。
原則、HTMLではIDはユニークであるべき。

元記事を表示

パーフェクトRubyonRails備忘録5

# ActiveJobによる非同期実行

– どういう時に使う?
– リクエストからレスポンスまで時間がかかりそうな時などに、レスポンスだけ返して処理は非同期で実行する
– ジョブの実装
– ジョブクラスの生成

“`bash
rails g job async_log
“`

– `app/jobs/async_log_job.rb` ファイルとテストファイルが作られる
– ジョブクラスの実装

“`ruby
class AsyncLogJob < ApplicationJob queue_as :default def perform(message: "hello") AsyncLog.create!(message: message) # 実行したい処理を書く end end ``` - ジョブをキューに入れる - ジョブの実行はバックエンドが担当する(ややこしや

元記事を表示

OTHERカテゴリの最新記事