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

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

【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というgemをインストールすることで使用できるようになる。
(Factoryを使用する手順(インストール方法など)は今回は省略。)
今回のタスク管理アプリで、「一覧画面に遷移した場合」→「作成済みのタスク一覧が表示される」というテストコードを書く際、Factoryを使用した。

“`spec/factories/task_spec.rb
FactoryBot.define do
factory :task do
name { ‘パパ’ }
content { ‘日曜日歯医者’ }
end
end
“`

元記事を表示

【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

元記事を表示

勉強記録ウェブアプリ作成の軌跡 3:ルーティングinサーバーサイド

# 概要
「【Rails×React】UberEats風アプリを作りながら、SPA開発を学ぼう」を使って学んでいく上で自分で勉強記録アプリを作りたいと思ったので、完成するかは置いといて、とりあえず学んだことを自分が作りたいものに置き換えて考えていく。

# 内容
サーバーサイドにおけるルーティングを書いていく。いわゆるwebページのURLを決めていく感じである。
例えば、買い物をするサイト(sample.com)があったとする。そのTOPページのURLが`https://sample.com`だとする。そこから商品一覧ページに遷移した時のURLは`https://sample.com/goods`のようなURLとなるでしょう。また、そのサイトにおける自分のプロフィールページは`https://sample.com/myprofile/12334`などが考えられる。最後の数字はユーザごとに割り当てられたIDと考えてもらえれば。。。

このように特定のURLいわゆるリソースを取得するための道筋、ルートを書き記していく。

# 実装
基本的な書き方は以下の通りである。

– do endのブ

元記事を表示

勉強記録ウェブアプリ作成の軌跡 1:データ・モデルの設計

# 概要
「【Rails×React】UberEats風アプリを作りながら、SPA開発を学ぼう」を使って学んでいく上で自分で勉強記録アプリを作りたいと思ったので、完成するかは置いといて、とりあえず学んだことを自分が作りたいものに置き換えて考えていく。

# 内容
今回作成する勉強記録アプリで使用するデータを定義する。
今回実装する内容や範囲を確認し、全体像を掴む。そこからデータの種類や名称、どのような情報を持つのか考え、押さえていく。
今回おさえたデータを入れていくデータベースの設計図がMigrationファイルと呼ばれるもの。そして、データの説明書のようなものがModelである。

例えば、記事のデータにはタイトルや内容などの情報が必要である。データベースで言えばカラムとして保持されるtitleやcontentである。このようにどんなデータベースを作って欲しいかという指示するのがRailsのMigrationである。

一方で、記事のデータそのものはどういうデータかを定義しているのはModelである。

Migrationはあくまでデータベースの箱の設計図であり、中身のデータがどうい

元記事を表示

Controllerファイルの機能について

## この記事で何がわかるか?
①Controllerファイルで、なぜリクエスト処理やモデルオブジェクトの操作が出来るか?
②継承元のControllerは、どんな役割があるか?

## モデル名の付いたコントローラーから分かること

“`HomeController.rb
class HomeController < ApplicationController def top end def about end end ``` ```PostsController.rb class PostsController < ApplicationController def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find_by(id: params[:id]) end def new @post = Post.new end def create @post = Post.n

元記事を表示

bcryptGemを用いたパスワードのハッシュ管理

# bcryptGemを用いたパスワードのハッシュ管理

Webアプリケーションのセキュリティを確保する上で、パスワードの安全な管理は重要な役割を果たします。`bcrypt` Gemを使用することで、Railsアプリケーションにおいて、パスワードを安全にハッシュ化し、管理することが可能です。この記事では、`bcrypt` Gemを使用したパスワードのハッシュ化と認証プロセスについて詳しく解説します。

## bcryptGemとは

`bcrypt` Gemは、パスワードのセキュリティを向上させるために使用されるRubyのライブラリです。このGemは、パスワードをハッシュ化することで、データベースに平文のパスワードを保存するリスクを回避します。

### パスワードのハッシュ化

– ユーザーがパスワードを設定すると、`bcrypt` Gemはそのパスワードをハッシュ化します。これにより、実際のパスワードとは異なる、独特な文字列が生成されます。

## has_secure_passwordの利用

Ruby on Railsでは`has_secure_password`メソッドを使用

元記事を表示

DeviseGemを使わないログイン機能の実装方法

# DeviseGemを使わないログイン機能の実装方法

Webアプリケーションにおいて、ユーザー認証機能はセキュリティとユーザーエクスペリエンスを確保するために不可欠です。しかし、すべてのプロジェクトでDeviseGemなどの認証フレームワークを使用するわけではありません。ここでは、DeviseGemを使わない基本的なログイン機能の実装方法を解説します。

## サインインとログインの基本的な仕組み

### セッションの利用

– ユーザーがログインすると、そのユーザーのIDがセッション変数に保存されます(`session[:user_id] = @user.id`)。
– ブラウザはこのセッション情報を受け取り、以降のリクエストにセッションIDを含めてサーバーに送信します。
– サーバー側はセッションIDを確認し、それに基づいてユーザーがログイン済みであるかどうかを判断します。
– ユーザーログアウトして際は、ユーザーのIDをセッションから剥奪します(`session[:user_id] = nil`)。

### カレントユーザーの設定

– セッションに保存されているユーザー

元記事を表示

Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

## 概要
ruby on railsのDocker開発環境構築中に上記エラーが発生しました。
いくつかの問題が複合していて、解決までにちょっと時間がかかってしまったので、備忘録がてらに記録を残しておいて、後続の誰か参考にしてくれたらな〜という目的でゆるく解決方法を記載しておきます。

## 解決手順(要約)
① socketファイルがどこにあるか確認してdatabase.ymlに設定する
② database.ymlのhost名を変更する

## 解決までの道のり

以下のようにdocker-compose.ymlを定義して、rails new ~で各種ファイルを生成し、あとはrake db:createすればサーバー起動できる…というところまで来ていました。(railsのバージョンは7.1.2)

“`yml:docker-compose.yml
version: ‘3’

services:
db:
image: mysql:5.7
environment:
MYSQL_USER: ${MYSQL_USER_NAME}
MYSQL_

元記事を表示

【ActiveRecord】find・find_by・whereの違いと主要メソッド

# 【ActiveRecord】find・find_by・whereの違いと主要メソッド

Ruby on Railsの強力な機能の一つであるActiveRecordは、データベースの操作を簡単かつ効率的にするORM(Object-Relational Mapping)システムです。この記事では、ActiveRecordの基本的な使い方、特に`find`、`find_by`、`where`メソッドの違いに注目し、New、Create、Update、Delete、Saveといった主要メソッドの概要を解説します。

## ActiveRecordの概要

ActiveRecordは、Ruby on RailsのMVCモデルの中でモデル層を担当し、データベースとの間でデータをやり取りする役割を果たします。SQLを直接書く代わりに、Rubyのメソッドを使用してデータベースを操作することができます。これにより、コードの可読性が向上し、データベース操作が容易になります。

## find・find_by・whereの違い

### findメソッド

`find`メソッドは主にIDに基づいてレコー

元記事を表示

勉強記録ウェブアプリ作成の軌跡 2:フロントエンド設計

# 概要
「【Rails×React】UberEats風アプリを作りながら、SPA開発を学ぼう」を使って学んでいく上で自分で勉強記録アプリを作りたいと思ったので、完成するかは置いといて、とりあえず学んだことを自分が作りたいものに置き換えて考えていく。

# 内容
前回の記事で決めたデータを元に画面とコンポーネントの設計を行う。
画面に対応するコンポーネントはデータを扱うため、最初の設計を誤ると保守性の低いフロントエンドのコードになるため注意が必要。
コンポーネントというのは、ボタンや画像などのUIのパーツや部品のこと。

# コンポーネント
### 「データを扱うコンポーネント」 Container Component
こちらは親コンポーネントとして複数の子コンポーネントにデータを渡す役割がある。
### 「受け取ったデータをただ表示するためのコンポーネント」 Presentational Component
これはボタンやモーダルなどが含まれる。

コンポーネントがこの2種類に分けられている最も大きい理由として、子コンポーネントの再利用性を高めることが挙げられる。
例えば、複数のペー

元記事を表示

【minitest】 request.refererを使用する方法

# はじめに
最近`request.referer`という便利なものがあることを知り、使用する機会がありました。
ですが、minitestを書いている際にリファラを用いたアクションのテストがうまくいかず少し苦戦してしまったため、備忘録を兼ねてここに残しておこうと思います。

# そもそもrequest.refererってなに?
リクエストヘッダーが持っている情報の一つであり、遷移前のURLを取得することができます。

そのため、`request.referer`を活用することで、
– どのページからの流入なのかアクセス解析ができる
– 遷移元のURLに戻りたい時にリダイレクト先として使用できる

といったメリットがあります。

今回は後者のように、`request.referer`をリダイレクト先として使用した時の、minitestの書き方について考えます。

# minitestでのrequest.referer
ここでは`request.referer`を使用して、遷移元のURLに再度リダイレクトするようなアクションのテストを作成することを考えます。

“`rb
# get

元記事を表示

【Rails】ポリモーフィックが便利〜

どうもこんにちは。

今回はポリモーフィックについてまとめます。

# ポリモーフィックってなんぞや?

ポリモーフィックとは、複数のモデル同士の関連付けの考え方です。

この考え方は、異なるモデルを単一の関連で扱う機能です。

例えば、以下のようにテーブルが存在しているとします。

commentsテーブル
| カラム名 | 型 | 値1 | 値2 | 値3 |
| — | — | — | — | — |
| id | integer | 1 | 2 | 3 |
| comment | text | ワンちゃんかわいい!! | よろしくお願いします。 | この時期寒くね? |
| article_id | integer | null | 1 | null |
| photo_id | integer | 2 | null | null |
| tweet_id | integer | null | null | 1 |

articlesテーブル
| カラム名 | 型 | 値1 | 値2 |
| — | — | — | — |
| id | in

元記事を表示

【Rails】rails db: から始まるコマンドまとめ

どうもこんにちは。

今回はRails開発で使う`rails db:`から始まるコマンドをまとめてみました。

# データベース作成

以下のコマンドでアプリケーションで使用するためのデータベースを作成します。

“`
$ rails db:create
“`

# データベース削除

以下のコマンドでアプリケーションで使用していたデータベースを削除します。(データやテーブル、カラムなどが全て消えます。)

“`
$ rails db:drop
“`

# データベースを最新にする

以下のコマンドでデータベーススキーマの状態を最新の状態にします。

“`
$ rails db:migrate
“`

マイグレーションファイルは以下のコマンドで生成します。

“`
rails g migration AddAgeToUserModel
“`

生成されるマイグレーションファイルは以下のようになります。

“`ruby
class AddAgeToUserModel < ActiveRecord::Migration[6.0] def change

元記事を表示

MySQL で複数種類の複合ユニーク制約をつける (NULLも許容) (+Railsのマイグレーション例)

# 概要

知らなかったが MySQL で複合キーのユニーク制約を付けた場合、nullのあるカラムは許容してくれるみたいだ。

たとえば `column_1` と `column_2` で複合ユニーク制約のあるテーブルで、 以下2個のレコードを追加した場合、 ユニーク制約に引っ掛かりそうだが許容してくれる

“`
column_1の値: AAA
column_2の値: NULL
“`

“`
column_1の値: AAA
column_2の値: NULL
“`

こうすると例えば、1テーブルで複数の複合ユニーク制約があっても、問題なく扱うことが出来る

たとえば `column_1 / column_2` の組み合わせと `column_3 / column_4` の組み合わせでそれぞれ複合ユニーク制約がある場合、片方の組み合わせはNULLでも問題なくなるのだ

“`
column_1の値: NULL
column_2の値: NULL
column_3の値: YES
column_4の値: YES
“`

“`
column_1の値: NULL
column_2の値

元記事を表示

【Rails】同じグループのアクションのルーティングをネストと非ネストに分ける

# はじめに
オリアプに関して、実装時に考えていたことを忘れないように頭の整理目的で書き残したいと思います。
実装途中の話を公開しますので、見た人がわかるような文章構成になっていない可能性があります(全部語ると長くなり、本来のメイン目的である頭の整理に沿わないため)。
結論だけ知りたい方は「解決方法」だけ見ればOKです。
また、必ずしも時系列ではないです。

# 自分のこと
先日プログラミングスクールを卒業して現在転職活動中です。
プログラミング未経験の状態からプログラミングスクールに通い始めました。
転職活動と同時並行でオリジナルアプリの開発をしています。

# オリジナルアプリについて
マンション管理アプリを作成しています。
メイン機能としては分譲マンションの管理会社が社内で使用する(想定の)業務アプリです。
サブ機能として、マンション住民も一部の機能にアクセスできるようにしています。
## アプリのコンセプト
これを知らないと、この人は何をそんなにこねくり回しているんだとなりそうなので、このアプリのポイントを2つ挙げます。
### ・複数のユーザーモデルが存在する

元記事を表示

【Rails】Google mapのマーカー(ピン)をカスタマイズして遊んでみた

## はじめに
こんにちは。[kosukein38](https://twitter.com/kosukein38)です。
最近仕事でGoogle map API(`Maps JavaScript API`)を使っていました。
後学も兼ねて、マーカー(ピン📍)を色々カスタマイズして遊んでみました🥳
自分は”ピン”を立てるとかってよくいうのですが、公式に習って、本記事では”マーカー”と呼ぶことにします。
徐々にステップアップする感じで書いてみたので、良かったら参考にしていただけたら幸いです。

## この記事の対象者

– Google map API(`Maps JavaScript API`)を初めて触る方
– RailsアプリにGoogle mapを組み込んで、あれこれ情報を表示したい方

## 内容(この記事でやること、やらないこと)

### やること
– Google map API(`Maps JavaScript API`)をRailsに導入する
– 地図を描画する
– 地図にマーカーを立てる
– マーカーの見た目を変える
– マーカーに吹き出しをつける + マーカーク

元記事を表示

【Rails】Renderにデプロイしたらビルドエラーが起こった

# 概要
Railsチュートリアルの第7章を進めていた時、
TLSと本番環境用の設定をRenderにデプロイしたときにビルドエラーが発生しました。

“`
ActiveRecord::ConnectionNotEstablished: could not translate host name “****” to address: Name or service not known

Caused by:
PG::ConnectionBad: could not translate host name “****” to address: Name or service not known

Tasks: TOP => db:migrate
(See full trace by running task with –trace)
==> Build failed 😞
“`

# 結論(解決策)
PostgreSQLのリージョンをシンガポールからオレゴンに変更した

# 試したこと
## PostgreSQLのVersionを15に変更する
Railsチュートリアルが更新された

元記事を表示

Railsでフォームから送付された画像をpublicフォルダに保存する方法

# Railsでフォームから送付された画像をpublicフォルダに保存する方法

Railsを用いてWebアプリケーションを構築する際、フォームからアップロードされた画像をサーバー上に保存する必要があることがよくあります。本記事では、フォームから送付された画像をpublicフォルダに保存する方法について詳しく解説します。この方法は、特に画像の名前をユーザーのIDに基づいて管理したい場合に有用です。

## 画像ファイル名の保存と変更

### 画像ファイル名の設定

まず、ユーザーに関連付けられた画像ファイルの名前を設定します。これは、ユーザーのレコードが作成された後、そのIDを使用して行います。

#### イメージ名の生成

“`ruby
@user.image_name = “#{@user.id}.jpg”
“`

上記のコードでは、ユーザーのIDを取得し、それをファイル名の一部として使用しています。これにより、各ユーザーにユニークな画像ファイル名が割り当てられます。

## フォームからの画像データの受け取り

### 画像データの取得

フォームから送信された画像データ

元記事を表示

OTHERカテゴリの最新記事