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

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

初めてのRSpecで学んだこと No.2

## バージョン
– ruby 3.2.2
– Rails 6.1.7.6
————————-

## タスク管理アプリでの、タスクが降順に並んでいるかをRSpecでテストする
タスク管理アプリにて、投稿したタスクを降順に並べ、降順に並んでいるかをテストするために、「最新のタスクが一番上に表示される」、ということを確認するためのコードを書いたが、その時に学んだことを備忘録として残しておく。
“`spec/factories/tasks.rb
FactoryBot.define do
factory :task do
name { ‘パパ’ }
content { ‘日曜日歯医者’ }
end
end
“`

“`spec/system/task.rb
RSpec.describe ‘タスク管理機能’, type: :system do
describe ‘新規作成機能’ do
context ‘タスクが作成日時の降順に並んでいる場合’ do
it ‘新しいタスクが一番上に表示される’ do

元記事を表示

【超基本】RubyでのHTML記述方法

## はじめに
この記事は、プログラミング学習を始めたての方、
特にRuby on Railsを独学やスクールで書いているが、
**「ビューファイルの構造や書き方がいまいちわからない」**
という方向けの記事です。

基本的な内容だけを扱うので、初心者の方向けの記事になります。

例えば、
– html.rubyファイルと普通のrubyファイルやhtmlファイルの違い
– “` <% %> “` と “`<%= %>“` の違い

などを述べます。

私自身もまだまだ初心者なので、この記事に間違いがあればご指摘いただけると幸いです。

## 記事を書こうと思った背景
この記事を書こうと思った背景は、
私自身、スクールに通っていたときに教材をコピペして勉强していて、
rubyとhtmlが一体となったビューファイルの仕組みや書き方がよくわかっていなかった経験があるからです。

この記事が、同じ状況の方の理解の助けになれば良いなという思いで記事を書きました。

## HTMLとは
HTMLとは、簡単に言うとWEBページを作成するためのマークアップ言語です。
マークアップ言語であっ

元記事を表示

ActiveSupport::Inflectorでacronymを追加するときにはunderscoreメソッドへの影響にも注意が必要

Railsで、以下のように acronym (略語) を追加することがあります。

“`rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym ‘HTTP’
end
“`

主に、定数名で使ったり、`humanize`で使ったりしたいときに設定すると思います。
今回、オートローダーを変更する際に、定数の検索方法が変わるということで、acronymを追加するかどうか、その影響を調査している際に当たりました。

https://railsguides.jp/classic_to_zeitwerk_howto.html#%E7%95%A5%E8%AA%9E%E3%81%AE%E6%89%B1%E3%81%84

## acronym を登録したとき

API documentに書いてありましたので、引用します。

https://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html#method-i-acron

元記事を表示

Tips: Railsでポリモーフィック関連付けを使うときはインターフェースに依存した実装をするようにしよう

## この記事は何
Railsにはポリモーフィック関連付けという機能があります。

https://railsguides.jp/association_basics.html#%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91

この機能は使い方によっては便利な一方、依存を複雑化させる原因にもなりうるものです。
この記事では、ポリモーフィック関連を使うときにやりがちな「特定のモデルへの依存」を避けるテクニックをご紹介します。

ポリモーフィック関連の具体的な使い方はドキュメントや、以下の記事などをご参考ください。

https://qiita.com/sazumy/items/726e7097c6ca4a9ca6e3

https://qiita.com/itkrt2y/items/32ad1512fce1bf90c20b

## ポリモーフィック関連を使っている時に起こること
ポリモーフィック関連を使っていると、特定の

元記事を表示

RailsでパスによってDBを切り替えれないか

# 概要
Rails6からマルチデータベースを利用できるようになりました
リードレプリカ構成で負荷をうまく分散させたり、取得するモデル単位でデータベースのコネクションを切り替えることができるようになりました

同一のモデルを取得するけれど、パスによって取得するDBを切り替えることを試したので書き残します

今回試した内容の結論から書くと「**concernで無理やり解決した**」となります

## どうやってDBを切り替えるのか
切り替えたいモデルが継承している抽象クラスに`connects_to database`を記述すれば切り替えができます

下記のような切り替えたいモデルとして`Card`があったとき、それが継承している`ApplicationRecord`に対して
writingのDBとreadingのDBを指定すると、必要に応じて切り替わります
“`ruby:app/models/card.rb
class Card < ApplicationRecord end ``` ```ruby:app/models/application_record.rb class A

元記事を表示

「OpenSSL::SSL::SSLError」について

### 【概要】

API通信中にSSL証明の認可にて、処理が弾かれてしまったので、今回fixした方法を備忘として記しておきます。

### 【環境】

・Rails
・Docker
・DeepL

### 【原因】

`DeepL`の導入後、標記の事象が発生しました。
ポイントとしては、SSL通信を行う設定にdocker側が対応していなかったことや、SSL通信するなどの事象が考えられます。

なお、通常のSSL通信では下記のようにセキュリティの情報を担保されていることを確認できるようになっております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/5b6045ad-bb54-c5d2-b565-7b67b1249335.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/d3484b5f-a3e3-13f2-7b33-ad0c6e

元記事を表示

Rails – NULLは許可するがブランク(空文字など)は禁止するバリデーション

# 例

– presence 指定でブランクを禁止する
– ただし allow_nil で値が nil の場合はバリデーションをスキップする

“`rb
validates :foo_attribute, presence: true, allow_nil: true
“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# Twitter

元記事を表示

Gem追加したときの「まずはinstallコマンド実行してね」を見ていく

# 概要
Gemのファーストコミットをするタイミングがあり、既存のGemでは「初期設定コマンド実行してね。みたいなのがあるけれどどうやってやるのか」と見ていて、少しまとめたので書いておきます

ほとんどが [Railsガイド](https://railsguides.jp/v7.1/generators.html) に書いてある内容なため、初心者向けの記事となっています :pray:

## generate initializer
> 「初期設定コマンド実行してね。みたいなのがあるけれど…
これはアプリケーションにGemを追加したときに初期設定をアプリケーション側に記載する場合、Gem側からジェネレーターが提供されていることがあります

ここでは認証のgemとして使用する `devise` を例に取って確認してみます

### deviseの例
deviseのREADMEに書いてある通り下記のコマンドでdeviseの初期設定を行うと`config/initializers`配下に`devise.rb`が作成されます

“`sh
$ rails generate devise:i

元記事を表示

【1日目】フロントエンジニアがRailsを習得するまで

# 「rails 学習法」でググる

とりあえずググって上から10個くらい記事を読みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629706/eb1d7a79-884f-d7af-f5d9-08609231b6b4.png)

# 参考になりそうなサイト
1. railsチュートリアル(結構難しいらしい)
https://railstutorial.jp/chapters/beginning?version=7.0

2. progate(簡単)
https://prog-8.com/courses

3. ドットインストール(簡単)
https://dotinstall.com/

4. Railsガイド
https://railsguides.jp/

5. Ruby on Rails Guide
https://guides.rubyonrails.org/

# 進め方
結論自分は以下をいきなり進めようと思いました。

– railsチュートリア

元記事を表示

require: cannot load such file — sassc-rails (LoadError)の解消

sassc-rails (LoadError)の解消方法をメモしておきます。

# エラーが出た状況

以下のコードの実行の際に起こりました。

~~~
bin/rails g model Task name:string description:text
~~~

# エラー内容
~~~
rubygems/core_ext/kernel_require.rb>:38:in `require’: cannot load such file — sassc-rails (LoadError)
~~~

この後にもエラー文章が続きましたが、一部だけ抜粋しました。

# 解決方法
gemファイルに以下の行を追加する。
“`
gem ‘sassc-rails’
“`

bundleを行こなって更新する。

これでエラーが解決しました。

元記事を表示

Rails エラーメッセージの表示方法

## はじめに
RUNTEQに入学して2ヶ月の学習者です。
間違い、改善点等ありましたらコメントいただけると嬉しいです。
## 1.なぜこの記事を作ったのか
エラーメッセージを出そうとしたが、方法が分からなかった。エラーメッセージについての知識が足りていないので備忘録にする。
## 2.環境
– ruby 3.2.2
– Rails 7.1.2
## 3.エラーメッセージについて

“`ruby:user.rb
class User < ApplicationRecord validates :name, presence: true end ``` - 上の画像はNameの値を空にしてユーザーを作成しようとしたもの。 - エラーメッセージは、カラムにバリデーションを設定し、バリデーションの条件を満たさないデータが

元記事を表示

[Ruby on Rails]既存のテーブルにカラムを追加するためのマイグレーションにえらい苦戦した話

## 経緯
初任教育研修で、既存のタスク管理アプリに機能を追加する際に苦戦したときのメモです。
タスク管理アプリに、タスクの期限機能を追加開発する際に、既存のtasksテーブルにduedateカラムを追加しようとしていました。

## db:migrateコマンドの実行
まずはTasksテーブルにduedateカラムを追加するためのマイグレーションファイルを作成するためにgenarateコマンドを実行します。

“`terminal
rails g migration AddDueDateToTasks duedate:datetime
“`

これで自動的に以下のようなマイグレーションファイルができました
“`Ruby
class AddDueDateToTasks < ActiveRecord::Migration[7.1] def change add_column :tasks, :duedate, :datetime end end ``` ## マイグレーションファイルの編集の際に陥った勘違い まず、自分が勘違いして書いた間違ったコードが

元記事を表示

【Rails】modelでメソッドにselfをつける時とつけないときの違い

どうもこんにちは。

今回はRailsでモデルファイルで定義したメソッドに`self`をつける時とつけない時の違いについて説明します。(おまけでバリデーションメソッドについても説明しています。)

# モデルにメソッドを定義する理由

## 1. 全体で利用可能

モデルに定義したメソッドはアプリケーション全体で利用可能となるメソッドです。そのため、コントローラやビュー、他のモデルの中でも使用することができます。

## 2. 処理の共通化

アプリケーション内で何度も同じ処理をする必要がある場合があります。その時に**同じ処理の共通化**を目的としてモデルにメソッドに定義し、同じ処理をしたい箇所でメソッドを呼び出すことでコードが簡略化できます。

## 3. バリデーションを定義

本来は、`validates`メソッドを使用してカラムに対して「空白禁止」や「文字数制限」を定義します。大体のバリデーションは1行で完結できます。しかし、二つのカラムにデータが入っていない場合のバリデーションを定義するときには、俗にいう「バリデーションメソッド」を定義します。

# selfを付けない場合

元記事を表示

Ruby on Railsアップデート(ErrorReporter#unexpected/with_routingテストヘルパー 他 2023-11-24)

## 引用元
https://world.hey.com/this.week.in.rails/errorreporter-unexpected-with_routing-test-helpers-and-more-1b2c56f6

## 今週のトピック

### [ErrorReporter#unexpectedを本番環境ではreportし開発環境ではraiseするようにする](https://github.com/rails/rails/pull/49951)
https://railsguides.jp/error_reporting.html
この変更により、前提条件違反を報告する`ErrorReported#unexpected`が追加された。

例えば、以下のコードではdevelopment環境とtest環境ではエラーをraiseするが、production環境ではエラーをreportする。
“`
def edit
if published?
Rails.error.unexpected(“[BUG] Attempting to edit a pub

元記事を表示

【Rails】text_fieldにカンマ入り金額が入力され1円で出品されそうになった話

## 経緯
ECサイトにシステムから1800ドルで出品する処理を行ったところ1ドルで出品されるという報告を受ける。
⇨検証のため同じ環境で同じ価格で出品したところ、正常に出品される。
⇨原因がわからない。
という事象が発生。

## 原因
出品テストの担当に聞いたところ1800ドルが1ドル、2200ドルが2ドルになっているとのこと。
ここで「入力値にカンマやピリオドが入っているのでは」と気付く。

入力欄を確認するとnumber_fieldではなくtext_fieldとなっており、
価格を1,800ドルで出品してみると、1ドルで出品される現象が再現された。

## いろいろ確認してみた
今回の対処としてはtext_fieldをnumber_fieldに修正し、
数字以外入力不可能とすることで完了したが、
int型,decimal型で文字列を含む数字を受け取った時の挙動を確認してみた。

1,000 → 1
1,000円 → 1
10,000 → 10
¥10,000 → 0
いちまんえん → 0

先頭から文字列までの数値が保存されるようだ。

## まとめ
価格、数量など数値しか扱わ

元記事を表示

【Rails】Capistrano × GitHub Actionsで自動デプロイ環境を整える

# はじめに
RailsアプリをCapistranoでEC2(Docker使ってない)にデプロイしています。
普段ローカルで`bundle exec cap staging deploy`を実行してEC2にデプロイしていたのですが、GitHub Actionsでデプロイできるようにしました。
本記事では以下のシチュエーションを想定しています。
* developブランチで修正する
* ローカルでCapistranoデプロイが既にできている
* ステージングサーバーにデプロイする
* Macを使用している

# 前提
CapstranoはSSH接続ができることを前提としています。
ローカルでデプロイできるということは、すでにローカル環境がリモートサーバーにSSH接続ができるように設定されているからです。
しかしGitHub Actionsのランナーは当然設定してあげないと、対象のリモートサーバーとはSSH接続ができません。
ランナーがSSH接続できるようになれば、あとはcapコマンドでいい感じに自動でデプロイしてくれるようになります。

つまり、**ランナーがリモートサーバーとSSH接続

元記事を表示

【Rails】APIのコントローラでparamsを受け取る方法

## 実装

“`ruby: /app/controllers/application_controller.rb
class ApplicationController < ActionController::API before_action :set_params def set_params params = {} request.query_parameters.each do |key, value| params[key] = value.to_s end @params = params end end ``` ## 解説 ### [10.1requestオブジェクト](https://guides.rubyonrails.org/action_controller_overview.html#the-request-object) 以下、日本語訳&要約 > ・リクエスト オブジェクトには、クライアントから受信したリクエストに関する多くの有用な情報が含まれています。
・このオブジェクトでアクセスできるプロパテ

元記事を表示

初めてのRSpecで学んだこと

課題で出てきて、初めて取り組んだRSpec!
色々なポイントを学んだので備忘録として残しておく。
初学者なので、間違ってる点などあればご指摘下さい。

## バージョン
– ruby 3.2.2
– Rails 6.1.7.6
————————-

作成しているアプリはタスク管理アプリ

## SystemSpecの基本
### Factoryを使用したテスト
Factoryとは、railsでテストをする時用のテストデータを作成してくれるテンプレートのこと。
[`factory_bot_rails`](https://github.com/thoughtbot/factory_bot_rails) というgemをインストールすることで使用できるようになる。
(Factoryを使用する手順(インストール方法など)は今回は省略。)
今回のタスク管理アプリで、「一覧画面に遷移した場合」→「作成済みのタスク一覧が表示される」というテストコードを書く際、Factoryを使用した。

“`spec/factories/task_spec.rb
FactoryBot

元記事を表示

【OpenAI】RailsでChat GPTを導入しよう

## はじめに
どうもこんにちはもきお([@mokio_50](https://twitter.com/mokio_50))です。突然ですが皆さんはChat GPTは好きですか? 自分は大好きです。

どれほど開発の手助けになってきたことか。そんなChat GPTを会社のシステムとAPI連携することになりました。その機能開発を担当したので今回はRailsでChatGPTのAPI連携する流れを記事にしたいと思います。

## 目次
1. APIキーの発行
2. 今回の実装イメージ
3. 実装
4. 検証

## 1. APIキーの発行
外部APIとの連携を行うためにはAPIキーが必要になります。以下の記事が参考になりました。

【画像付き】OpenAI(ChatGPT)のAPIキー取得手順

## 2. 実装イメージ
通常の外部API連携だと例えば法人番号を取得できるAPIと連携するとしましょう。その場合法人番号が取得できるリクエストを作成し、返ってきたレスポンスに対して整形し表示なりデータベースに保存するなりする流れになるかなと思います。

今回はChat機能

元記事を表示

ebay出品時のコンディション設定について

## コンディションについて
コンディションとはヤフオクで言う「新品」「中古」「可」など商品の状態を指すものであり、
eBayへ出品を行う際、一部のカテゴリを除き指定が必須となっています。

じゃあ指定すればいいだけの話じゃん。となりそうですが実はeBayのコンディションは
ヤフオクのようにどの商品でも共通しているわけではなくカテゴリによって
選択できるコンディションが異なっています。

例えば下表の赤枠は食品ですが、こちらは「New」しか選択できないのに対し
青枠のカメラ等は非常に多くのコンディションが選択できます。
![スクリーンショット 2023-11-26 0.02.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083940/5d56ae5e-2d5a-a19b-1b28-d4ca73845e65.png)
_[eBayドキュメント](https://developer.ebay.com/devzone/finding/callref/enums/conditionidlist.ht

元記事を表示

OTHERカテゴリの最新記事