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

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

商品購入機能 単体テストコードの実装

# はじめに
プログラミング初心者です。現在フリマアプリの終盤、商品購入機能実装中。
間違っていたら、コメントをお願いします。
# 単体テストコード
これまで、商品購入機能の実装を進めてきました。
まだ、クレジットカード機能の実装はしていませんが、ひとまずテストコードを書きます。

### 今回のポイント
1、MySQL client is not connectedのエラーが出たときはこちらを記載!

config/environments/test.rb
“`
Rails.application.configure do
#省略
config.active_job.queue_adapter = :inline #追記
#省略
“`
2、カラム名は揃えるべし
テストコードのファイルやFacrtoryBotのファイルごとで、ActiveHashカラムの~~~_idのidを付けたり付けなかったりしていました。
それによって、テストコードがいつまでもActiveStorageエラーになり成功しませんでした、、、。

3、誤字をなくす!
“`
2) OrderAd

元記事を表示

Formオブジェクト

# はじめに
プログラミング初心者です。現在Ruby on Railsにてアプリ作成中終盤。
間違っている箇所がありましたら、コメントお願いします。

# Formオブジェクトについて
今回Formオブジェクトという新しい概念を学びました。
このFormオブジェクトの目的は、1つのフォームから送られてきた情報を複数のテーブルに保存することです。
### 手順
#### 1.Formオブジェクト用のモデルを作成します。
保存したいテーブルがorder(注文情報)とaddress(注文者の情報)だったら、order_address.rbというファイルを自主作成します。
#### 2.そのファイルにform_withで使用する機能とバリデーションを作成します。
“`
include ActiveModel::Model
attr_accessor :hoge, :hogehoge,:hogehogehoge ~~~~

↓以下バリデーションの記述
“`
#### 3.データをテーブルに保存する処理
“`
↑バリデーションの記述

ef save
order = Order

【Rails】form_tagとは

# form_tagとは
`form_tag`は、HTMLのフォーム要素を生成するためのヘルパーメソッドの1つです。このヘルパーメソッドは、フォームを手動で構築する必要がある場合に使用されます。特に、モデルと関連付けられていないフォームを作成する場合や、フォームが複雑な場合に便利です。

`form_tag`は、HTMLの`

`要素を生成します。このメソッドは以下のように使用されます。
“`rb
<%= form_tag('/search', method: 'get') do %>
<%= text_field_tag(:query) %>
<%= submit_tag("Search") %>
<% end %>
“`
上記の例では、`form_tag`ヘルパーメソッドが`/search`に対するGETリクエストを行うフォームを生成します。フォーム内には、`text_field_tag`を使用して検索クエリを入力するためのテキストフィールドが含まれています。また、`submit_tag`を使用してフォームを送信するためのサブミットボタンが含まれています。

`

【Rails】Strong Parametersとは

# Strong Parametersとは
Strong Parameters(ストロングパラメータ)は、Railsアプリケーションで安全にリクエストパラメータを扱うための仕組みです。これは、マスアサインメント脆弱性(Mass Assignment Vulnerability)を防ぐために導入されました。

マスアサインメント脆弱性は、フォームから送信されるパラメータを使用して、意図しない属性の更新や作成を許可する可能性があるセキュリティ上の問題です。Strong Parametersを使用することで、コントローラーで受け取ったリクエストパラメータから明示的に許可されたパラメータのみを取り出し、使用することができます。

Strong Parametersを使用するには、ストロングパラメータを許可するためのホワイトリストを定義する必要があります。通常、コントローラーのプライベートメソッド内でこれを行います。

# 使用方法
例えば、`create`アクションで`User`モデルに対してパラメータを許可する場合は、以下のようにします。
“`rb
class UsersControlle

【Rails】パスワードのハッシュ化

# パスワードのハッシュ化とは
パスワードのハッシュ化は、セキュリティ上の重要な手法であり、ユーザーのパスワードをデータベースに保存する際に平文ではなくハッシュ化された形式で保存することを意味します。これにより、パスワードがデータベース内に暗号化され、万が一データベースが漏洩しても、実際のパスワードを知ることはできなくなります。

# 実装手順
以下は、提供された用語を使用してパスワードのハッシュ化を実装する手順です。

1\. **gem bcrypt**
`bcrypt`は、パスワードの安全なハッシュ化を行うためのライブラリであり、Ruby on Railsのプロジェクトで使用されることがあります。Gemfileに`bcrypt`を追加して、`bundle install`コマンドを実行してインストールします。

Gemfile:
“`rb
gem ‘bcrypt’, ‘~> 3.1.7’
“`
ターミナル:
“`
$ bundle install
“`

2\. **password_digestカラム**
ユーザーのパスワードをハッシュ化して保存するために、データベース

【Rails】before_actionとは

# before_actionとは
`before_action`は、コントローラー内のアクションが実行される前に特定の処理を実行するためのフィルターです。これは、アクションの実行前に事前に定義されたコードを実行することができるため、DRY(Don’t Repeat Yourself)原則に従ってコードを簡潔に保つのに役立ちます。

`before_action`を使用すると、以下のようなことができます。

1\. 特定のアクションにアクセスする前にユーザーの認証を行う。
2\. 特定のアクションにアクセスする前に、特定の条件が満たされていることを確認する。
3\. 特定のアクションにアクセスする前に、特定のデータをロードする。

`before_action`は、コントローラーのクラス定義内で使用され、指定されたアクションが実行される前に実行されるメソッドを指定します。

例えば、以下のように`before_action`を使用して、特定のコントローラー内のアクションが実行される前に認証を行うことができます。
“`rb
class UsersController < Applica

【Rails】getとpostの違い

# getとpostの違い
RailsにおけるGETとPOSTの違いは、HTTPリクエストの種類とその目的にあります。

# GETリクエスト
– リソースの取得を目的とするリクエストです。
– リクエストされたURLに対応する情報を取得するために使用されます。
– リクエストパラメータはURLのクエリ文字列に含まれます。
– リクエストはブラウザのアドレスバーに表示されるため、ブックマークや履歴に保存される可能性があります。
– キャッシュが可能であり、同じURLに対する複数のGETリクエストは、同じ結果を返す必要があります。
# POSTリクエスト
– サーバーにデータを送信するためのリクエストです。
– リクエストされたURLにデータを送信し、それに基づいて処理を行います(データの作成、更新、削除など)。
– リクエストパラメータはリクエストボディに含まれます。
– データの送信が暗号化され、ブラウザのアドレスバーに表示されません。
– キャッシュされません。

Railsでは、これらのHTTPリクエストを受け取るために、それぞれのリクエストタイプに対応するルーティングメソッドが

【Rails】ロギングとは

# ロギングとは
ロギングは、アプリケーションの実行中に発生する様々なイベントや情報を記録することを指します。これには、リクエストの処理、データベースクエリの実行、エラーメッセージなどが含まれます。ロギングは、アプリケーションの動作を理解し、デバッグやトラブルシューティングを行う際に非常に役立ちます。

Railsのデフォルトのロギング設定では、開発環境とテスト環境では詳細な情報が記録され、本番環境では情報が最小限に抑えられます。これにより、開発中やテスト中はデバッグがしやすく、本番環境ではパフォーマンスが最適化されます。

ロギングは、`logger`オブジェクトを介して行われます。このオブジェクトはRailsアプリケーション全体で利用可能であり、`Rails.logger`を介してアクセスできます。ログレベル(debug、info、warn、error、fatal)を指定してログメッセージを出力することができます。

以下は、ロギングの基本的な使用例です。

“`ruby
# デバッグ情報の出力
Rails.logger.debug(“This is a debug messag

【Rails】each文とは

# each文とは
Railsの`each`文は、Rubyの標準的な`Enumerable`モジュールから派生したメソッドで、コレクション(配列やハッシュなど)の要素を1つずつ取り出して繰り返し処理を行うためのものです。

主にビューで使用され、データベースから取得したレコードなどのデータを表示する際によく使われます。例えば、コントローラーで取得したレコードをビューで一覧表示する場合に使用します。

以下は、Railsのビューでの`each`文の基本的な使用例です。
“`erb
<% @users.each do |user| %>

<%= user.name %>

<% end %>
“`
上記の例では、`@users`というインスタンス変数に格納されているユーザーのコレクション(おそらくデータベースから取得したもの)を繰り返し処理しています。各ユーザーの名前を`

`タグで表示しています。

`each`メソッドはブロックを受け取り、コレクション内の各要素をそのブロックに渡して処理を行います。ブロック内の変数(この場合は`user`)には、現在の要素が格納さ

【Rails】whereメソッドとfind_byメソッドの違い

# whereメソッドとfind_byメソッドの違い
`where`メソッドと`find_by`メソッドは、どちらもActive Recordクエリインターフェースを使用してデータベースからレコードを取得するためのメソッドですが、いくつかの重要な違いがあります。

1\. **戻り値の型**
– where: whereメソッドは条件に一致するすべてのレコードを取得し、それらを含むコレクション(ActiveRecord::Relation)を返します。結果が1つ以上のレコードであっても、常にコレクションを返します。
– find_by: find_byメソッドは条件に一致する最初のレコードのみを取得し、そのレコードを返します。結果が1つ以上のレコードであっても、最初の一致するレコードのみを返します。

2\. **返り値が存在しない場合の挙動**
– where: whereメソッドは、条件に一致するレコードが存在しない場合、空のコレクションを返します。
– find_by: find_byメソッドは、条件に一致するレコードが存在しない場合、nilを返します。

3\. **使用法**

【Rails】find_byとは

# find_byとは
`find_by`メソッドは、Active Recordクエリインターフェースを使用してデータベースからレコードを取得するためのメソッドの1つです。`find_by`メソッドは、特定の条件に一致する最初のレコードを取得します。

`find_by`メソッドは、検索条件を指定するためのハッシュを引数として受け取ります。指定された条件に一致するレコードが複数ある場合でも、最初に一致するレコードのみを返します。条件に一致するレコードが存在しない場合は`nil`を返します。

例えば、`User`モデルから名前が”John”である最初のユーザーを取得する場合、以下のように`find_by`メソッドを使用できます。
“`rb
# 名前が”John”である最初のユーザーを取得する
User.find_by(name: “John”)
“`
また、複数の条件を指定することもできます。
“`rb
# 名前が”John”かつ年齢が20歳である最初のユーザーを取得する
User.find_by(name: “John”, age: 20)
“`
`find_by`メソッドは

【Rails】whereメソッドとは

# whereメソッドとは
`whereメソッド`は、Active Recordクエリインターフェースを使用してデータベースからレコードを取得するためのメソッドです。`where`メソッドは、与えられた条件に一致するレコードを取得するために使用されます。

`where`メソッドは、検索条件を指定するためのハッシュやSQLの条件式を引数として受け取ります。例えば、特定のカラムの値が一致するレコードを取得する場合、以下のように使用できます。
“`rb
# カラムnameが”John”であるレコードを取得する
User.where(name: “John”)

# カラムageが20より大きいレコードを取得する
User.where(“age > ?”, 20)
“`
`where`メソッドは、条件に一致する複数のレコードを返す場合があります。また、条件に一致するレコードが存在しない場合は空の配列が返されます。

`where`メソッドは他のActive Recordメソッドと組み合わせて使用することもできます。例えば、`where`メソッドで条件に一致するレコードを取得した後、ord

【Rails】authenticateメソッドとは

# authenticateメソッドとは
`authenticate`メソッドは、ユーザーがログインしているかどうかを確認し、ログインしていない場合には適切な処理を行います。

具体的には、`authenticate`メソッドは、ユーザーの認証情報(通常はメールアドレスとパスワード)を受け取り、これらの情報が有効であるかどうかを確認します。有効な場合は、ログイン状態にしてセッションを確立し、アプリケーション内でユーザーが認識されます。無効な場合は、ログインページにリダイレクトされたり、エラーメッセージが表示されたりすることがあります。

`authenticate`メソッドは、主に認証Gem(例えばDeviseやSorceryなど)を使用する際に提供されるものであり、アプリケーション内で独自に実装することはありません。代わりに、これらのGemが提供するメソッドを使用して、ユーザーの認証を行います。

以下は、Devise Gemを使用した場合の例です。
“`rb
class SessionsController < Devise::SessionsController def c

【Rails】ログイン中のユーザーのみ編集・削除できるようにする

ログイン中のユーザーのみ編集・削除できるようにするために`ensure_correct_user`メソッドを作成します。
具体的には、`ensure_correct_user`メソッドは、リクエストされたリソースの所有者がログイン中のユーザーであることを確認します。もしログイン中のユーザーがリソースの所有者でない場合、権限がないことを通知し、適切なリダイレクトを行います。

以下は、このメソッドの説明と使用例です。
“`rb
class UsersController < ApplicationController before_action :set_user, only: [:edit, :update, :destroy] before_action :ensure_correct_user, only: [:edit, :update, :destroy] def edit # ユーザーの編集ページの表示などの処理 end def update if @user.update(user_params) redirect_to

【Rails】ログイン中にアクセス制限をする方法

# ログイン中にアクセス制限をする方法
ログイン中に特定のページにアクセスを制限するには、以下の手順を実行します。

1\. コントローラーで`forbid_login_user`メソッドを定義します。このメソッドは、すでにログインしているユーザーがログインページにアクセスできないようにするためのものです。
“`rb
class SessionsController < ApplicationController before_action :forbid_login_user, only: [:new] def new # ログインページの表示などの処理 end private def forbid_login_user if current_user flash[:notice] = "すでにログインしています" redirect_to posts_index_path end end end ``` 2\. `forbid_login_user`メソッドでは、`current_user`メソッドを使用

【Rails】authenticate_userとは

# authenticate_userとは
`authenticate_user`は、特定のアクションやリソースへのアクセスを許可する前に、ユーザーがログインしているかどうかを確認します。ユーザーがログインしていない場合は、通常はログインページにリダイレクトされます。

`authenticate_user`メソッドは、一般に以下のような形で使用されます。
“`rb
before_action :authenticate_user!
“`
上記のように、`before_action`フィルターと組み合わせてコントローラー内で定義され、特定のアクションが実行される前にユーザーの認証を行います。`authenticate_user!`メソッドは、Deviseといった一般的な認証Gemで提供されることが多いですが、自身でカスタムすることも可能です。

例えば、以下のようなコントローラーがあるとします。
“`rb
class PostsController < ApplicationController before_action :authenticate_user! def

【Rails】current_userとは

# current_userとは
`current_user`は、ユーザー認証システムで現在ログインしているユーザーを表すメソッドです。通常、Railsアプリケーションでユーザー認証を実装する際に使用されます。

`current_user`は、セッションやCookieを介してユーザーの情報を追跡し、アプリケーション全体で現在のユーザーを参照できるようにします。一般的に、以下のような流れで`current_user`が使われます。

1\. ユーザーがログインすると、そのユーザーの情報がセッションやCookieに保存されます。
2\. ユーザーがアプリケーション内でページをリクエストすると、Railsはそのリクエストに関連付けられたセッションやCookieからユーザー情報を取得します。
3\. Railsは、取得したユーザー情報を`current_user`として公開し、コントローラーやビューで使用できるようにします。

`current_user`を使用すると、ログインしているユーザーに関連するデータや権限を取得したり、表示したりすることができます。一般的な使用例は、コントローラーや

【Rails】redirect_toとは

# redirect_toとは
`redirect_to`メソッドは、コントローラーからのレスポンスとして、リダイレクトを行うためのメソッドです。これは、特定のURLや別のアクションに対してブラウザをリダイレクトさせるために使用されます。

`redirect_to`メソッドは、次のような形式で使用されます。
“`ruby
redirect_to path_or_url, options
“`
ここで、`path_or_url`はリダイレクト先のパスまたはURLを表し、optionsはオプションのハッシュです。

例えば、以下は`redirect_to`メソッドの使用例です。
“`ruby
redirect_to root_url
“`
上記の例では、`root_url`にリダイレクトします。`root_url`は、ルートパスへのURLを示します。

また、オプションとして、`flash`メッセージを設定することもできます。これにより、リダイレクト先のページでメッセージを表示することができます。
“`ruby
redirect_to root_url, notice: “ログ

Rubyで素朴なdiff(動的計画法)を書いてみた

![Peek 2024-02-04 16-00.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234055/bc9d428f-d799-2fcc-ada9-f34091973278.gif)

だいぶ前に書いたものを見て思い出したりしつつ最低限のものを書いてみました。

# コード

一番ベーシックな動的計画法のものを書いてみました。より改良された手法もあるようですが本記事では扱いません。

後で自分が見て思い出しやすいように少し冗長に書いています。「理解のためのリファクタリング」を自分なりに行った状態です。

“`ruby
# diff.rb

class Diff
def initialize(xs_a, xs_b)
@xs_a = [nil] + xs_a
@xs_b = [nil] + xs_b
@table = Array.new(@xs_a.size) { Array.new(@xs_b.size) }
end

def no_edit?(ai,

Fly.ioに個人アプリをデプロイしたのでメモ

Fly.ioに個人アプリをデプロイしました。色々記事を見比べながらやったので、次回のために流れをメモしようと思います。
デプロイするアプリは作成済みであることを前提とします。
## デプロイの流れ
### flyctlをインストール
Fly.ioが提供しているCLI(flyctl)で行うためインストールします。
“`
% brew install flyctl
“`
### サインアップ
初めて使う時は、アカウントの登録が必要です。コマンドを実行するとブラウザが立ち上がり、会員登録画面が表示されます。メールアドレスか外部認証を使って登録します。
“`
% flyctl auth signup
“`
### ログイン
アカウントの登録ができたら、ログインをします。コマンドを実行するだけで大丈夫です。

“`
% flyctl auth login
“`
### RailsとPostgreSQLサーバーの起動
`fly launch`コマンドを実行すると、質問文が表示されます。対話形式で答えて、設定していきます。
“`
% fly launch

# アプリケーションの