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

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

hamlでリンク先に飛べるボックスを作る方法

# はじめに
今回は、railsにてhamlを用いてXのリンク先に飛べるボタンを作り方を簡単にまとめたいと思います。

# 1.HAMLでのリンク生成
まず、HAMLファイルでリンクを生成する方法についてです。
以下のコードでXとInstagramとTikTokリンクに飛べる箱ができます。
“`
= link_to ‘X’, ‘‘, target: ‘_blank’, class: ‘box’, rel: ‘noopener’
“`
###### 簡単な説明
* link toヘルパーで指定したテキストが表示されます。上記の場合「X」のテキストで表示されます。
* link toの隣にリンク先のURLを記入します。(直接記入する場合)
* target: ‘_blank’ で新しくタブを開いて表示してくれます。
* class でcssを適応させるようにします。
* rel: ‘noopener’ も追加することでセキュリティを向上させることができます。

# 2. コントローラー設定
hamlで直接リンクを挿入した場合、コントーラーファイルに以下のコードを設定する

元記事を表示

【個人開発】詐欺被害を減らしたい!詐欺を未然に防ぐためのアプリ「詐欺師の手帳」を開発しました📒

## はじめに
こんにちは! yukimuraと申します
未経験からのWebエンジニア転職を目指して、2023年11月からプログラミングスクール「RUNTEQ」に入学し、Ruby on Railsを中心にプログラミング学習を行っております。

今回「詐欺師の手帳」というアプリをリリースしました。
詐欺被害を未然に防ぐことを目的としております。

## アプリ紹介
[![Image from Gyazo](https://i.gyazo.com/7f2c2cfc4ad0b3f2699ed538ab8fc41a.png)](https://gyazo.com/7f2c2cfc4ad0b3f2699ed538ab8fc41a)

### サービスURL(レスポンシブ対応済)
https://scammers-notebook.com/
### GitHub URL
https://github.com/yuki51b/scammer-s-notebook

## 開発背景
 自分自身や家族、友人などが詐欺被害に遭った経緯から、詐欺は身近であると同時にYoutubeなどで多くの人が詐欺に引っ

元記事を表示

【Rails】Minitestでのスタブとモックの使い方 入門

# はじめに
この記事は、RubyやRailsプロジェクトでMinitestを使ったことがあるけれど、スタブやモックについて理解がちょっと曖昧かも…という方のためにスタブやモックの基本的な考え方、使い方を解説するものです。

# スタブ、モックってそもそも何?

まずは、言葉の意味や基本的な使い方を見ていきます。

### スタブとその使い方
スタブというのは、「代用品」みたいな意味合いで使われます。Minitestでは主に、メソッドスタブというものを用意します。つまり、「代用メソッド」ですね。以下のように、自分の好きなようにメソッドの戻り値をセットできます。

“`ruby
require ‘test_helper’
require ‘minitest/autorun’

# 自己紹介ができる「パーソン」というクラスを例に取る
class Person
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end

def introduce_mysel

元記事を表示

退職して560万円相当の工数をかけてお金を稼ぐサービスを開発した

※ 前職の月額単価80万円を基準に、7ヶ月分の工数として560万円相当と換算。

## [BizRank](https://biz-rank.com/)

![BizRank – モック](https://github.com/user-attachments/assets/969e52bf-5e14-44af-8f37-f231edf5d791)

![BizRank – モック2](https://github.com/user-attachments/assets/073e69e6-ee6b-496a-9ebb-b6807519cebb)

※キャッシュがなくてコールドスタートとなる場合があります。その場合レスポンスが返るまでに2~3分ほどかかります。ご了承ください。

ビジネス書籍を紹介するサービスです。

自分が書籍を購入する際に、SNSでバズっている書籍をなんとなく購入しがちという所から、影響力ある人が薦める、おすすめの一冊を独自のアルゴリズムで評価してランキング形式で紹介します。

1月から退職して設計を始めて8月27日に人生初サービスをリリースする事ができました。

元記事を表示

Railsの`serialize`を使ってオブジェクトを簡単に保存・読み込みする方法

#### はじめに

Railsで開発を行う際、モデルの属性としてハッシュや配列などの複雑なデータを扱いたい場面があります。そのような場合、Railsの`serialize`メソッドを使うことで、手軽にオブジェクトをデータベースに保存し、また読み込むことが可能です。この記事では、`serialize`の基本的な使い方と注意点について解説します。

#### `serialize`の基本的な使い方

`serialize`は、モデルの属性をオブジェクトとして保存するためのメソッドです。通常、データベースのカラムは文字列や整数などの単純なデータ型を想定していますが、`serialize`を使用すると、これを簡単に回避できます。

例えば、`preferences`という配列を`User`モデルの属性として保存する場合、以下のように定義します。

“`ruby
class User < ApplicationRecord serialize :preferences, Array end ``` この場合、`preferences`はデータベース上ではテキストとして保存されますが、R

元記事を表示

AWS-S3のSSL認証エラーのデバッグ

## この記事の内容
ストレージとしてS3を使おうと思ったのに、保存ができなかったので調べつつデバッグしました。
備忘録として対応内容を残します。

### 環境
– Windows11にUbuntsを入れて実行
– WSL2を使用

## エラーの詳細

### エラーが発生する状況
– article/id/edit の画面で画像ファイルを添付し、保存ボタンを押すタイミングで発生
– 保存先のストレージを`:local`から`:amazon`に変更後に発現

### エラーの内容
“`
Seahorse::Client::NetworkingError – SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate):
app/controllers/articles_controller.rb:33:in `update’
“`

– 下記はchatGPTにエラーメッセージの内容を確認した際の返答
>Seahors

元記事を表示

Railsのreplicaの負荷分散を自作Resolverで実現する

Railsでは6.0から複数データベースへの対応を開始しました。
primaryと単一replicaのへの接続が実装されており、GETリクエストをreplicaで処理することなどで負荷分散を行うことができます。
しかし、複数のreplicaを利用しての負荷分散は実装されていません。

https://railsguides.jp/active_record_multiple_databases.html#replica%E3%81%AE%E8%B2%A0%E8%8D%B7%E5%88%86%E6%95%A3

とはいえ、ちょっと工夫をすると簡単に行うことができるので実際に作成してみましょう。

:::note info
※ 以下の文章は [Active Record の複数データベース対応](https://railsguides.jp/active_record_multiple_databases.html) を一度読んでいただいているのが前提になります
:::

## 以下のような手順で行います。

– 複数のreplicaの定義
– モデルとの関連付け
– resolverの定

元記事を表示

current_user関係のN+1を解決したい

# まえがき
先日からkindleチックなwebアプリを作っていたところcurrent_user関係のN+1問題にぶち当たったので解決方法等をまとめておく

# あらすじ
機能として「ログインなしでもセッションを使ってカートに商品は入れられるけど、ログインするときにセッションが残ってたらマージしてユーザーのカートと統合する」みたいなものです。

要するに、ログインなしの情報をユーザに引き継がせるみたいな。
(電子書籍を扱う想定なのでユーザーは同じ電子書籍を2つ以上変えません)

# コード
以下の想定。application_controller.rbでセッションの有り無しを判別して、
存在する場合はcartモデルの`combine_and_destroy_other_cart!`を呼ぶ。
内容としては
– 過去に注文していないもの
– カートに既に存在してもの

以上を満たすものをユーザーのカートに追加する。

その後セッションを破壊する。
以下詳細
### モデル
“`ruby
class User < ApplicationRecord # Include default

元記事を表示

コメントした人のアバターを並べて表示するためのコード

## この記事の内容
デイトラWeb開発コースの課題で以下のようなものがあり、結構手間取ったので実装した方法を残します。

![スクリーンショット 2024-09-01 215629.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875060/d12a6c00-8d03-08d0-cae8-aedea1433b88.png)

### 使っている技術とバージョン
– Rails 6.0.6.1
– ruby 2.7.7
– scss

### モデルの関係性
– UserモデルにTaskモデルが1対Nの関係で紐づいている
– Userモデルにavatarの画像が保持されている
– CommentsモデルはUserモデル、Taskモデルとそれぞれ1対Nの関係で紐づいている
– UserモデルにはBoardモデルも1対Nの関係で紐づいており、BoardモデルにはTaskモデルが1対Nの関係で紐づいている

### 得たい成果
– `views/tasks/index.html.haml`上に記事の作成

元記事を表示

【個人開発, 生成AI】エンジニア面接練習用アプリを作りました(概要紹介)

## はじめに

こんにちは![MaTTa](https://x.com/RckLVnPtRv61824)です。

この度、[**「面接シミュレータR**」](https://interview-frontend-05a5d7363eca.herokuapp.com/)というミニアプリを開発しました!

AIを活用したリアルな面接シミュレーションを通じて、未経験エンジニアや転職希望のジュニアエンジニアの皆様の**面接スキル向上**をサポートします。

## サービスURL

https://interview-frontend-05a5d7363eca.herokuapp.com/

## Githubリポジトリ

https://github.com/MaTTalv001/Interview_simulator2

## テーマ選定理由

以前、人事部門での勤務時に、数多くの面接やキャリア相談を担当させていただきました。この経験を通じて、求職者が面接で直面する特有の困難さや、準備不足による不安を目の当たりにしました。異動して現在の部署にいる今でも、その時に感じた課題を解決したいという

元記事を表示

【Rails】サーバ起動したら勝手にコードが実行されて499HTTPエラーが起きた件

どうもこんにちは。

今回は、AWS Elastic Beanstalk環境にデプロイした時に発生した499エラーの原因を解決したので、備忘録として残します。

# 何が起きていた?

当初は、以下の流れでデプロイをしていきたいと思っていました。

1. ソースコードを`git commit`
1. `eb deploy`実行
1. URLにアクセスして動作確認

しかし、3番目で499エラーが発生してしまいました。(**画面上では、502や504が表示されます。**)

# 原因はなんだったん?

499エラーの原因は、`lib`ディレクトリにありました。
開発者や組織によると思いますが、自分の触っているRailsアプリでは、**`lib`ディレクトリを`eager_load_path`に追加していました**。

“`rb:config/application.rb
class Application < Rails::Application config.eager_load_paths << "#{config.root}/lib" end ``` # なんでeage

元記事を表示

【備忘録】Webアプリ開発体験インターンシップ備忘録

どうもこんにちは。

今回は、8月後半に[弊社](https://www.pdc-ds.com/)で行なったインターンシップの概要について備忘録として残したいと思います。
ご参加いただいた学生にとってはかなり満足度の高いコンテンツとなったようでしたので、参考になればと思います。

# 概要

Ruby on Railsを使用してWebアプリケーションを開発してもらい、デプロイ、試験を通じてシステム開発の一連の流れを体験してもらう。

# 募集人数

5人

# 前提

本インターンシップで開発してもらったWebアプリは以下です。

**レベル1**: 自分用タスク管理アプリ(Todo機能のみ)
**レベル2**: 自部署用タスク管理アプリ(Todo + ユーザ管理 + ログイン/ログアウト)
**レベル3**: 社内用タスク管理アプリ(Todo + ユーザ管理 + ログイン/ログアウト + 部署管理)

上記のように、レベル/進捗状況によって、成果物を分けました。
(レベル1が終わったらレベル2、レベル2が終わったらレベル3というように実施)

最初のタスク管理アプリを開発するための枠

元記事を表示

カラムの追加、削除

## 1. カラムの追加
`$ rails g migration`でmigrationファイルを作成する。
例えば、`users`テーブルに`age`カラムを追加する場合、以下のようにコマンドを実行する。

“`
$ rails g migration AddAgeToUsers age:integer
“`

生成されたmigrationファイルは以下のようになる。

“`ruby
class AddAgeToUsers < ActiveRecord::Migration def change add_column :users, :age, :integer end end ``` データベースに反映。 ```bash $ rails db:migrate ``` ## 2. カラムの削除 不要になったカラムを削除する場合も、同様にmigrationファイルを作成する。 例えば、`users`テーブルから`age`カラムを削除するには、以下のコマンドを実行する。 ```bash rails g migration RemoveAgeFromUsers

元記事を表示

【Rails】scopeの注意点

# scopeのメリット
:::note
– 繰り返し利用するクエリの再利用性が上がる
– クエリに名前を付けることで、可読性が向上する
:::

# scopeの注意点
:::note warn
scopeの結果が`nil`となった場合は、`nil`を返す該当scopeの検索条件を除外したクエリを発行し、必ず***ActiveRecord::Relation***を返すという動作が行われる
:::

本記事では、こちらの注意点にフォーカスしています。

# (先に)結論

:::note
`nil`を返す可能性がある場合にはscopeで定義せず、クラスメソッドで定義する
:::

# 動作確認のための準備

## 環境
– Rubyバージョン:`2.6.6`
– Railsバージョン:`6.0.3`

## モデルの作成
“`
rails g model Book book_title:string publication_date:date price:integer
“`

## マイグレーション
“`
rails db:migrate
“`

#

元記事を表示

Ubuntu 24.04に上げたら Rails で libMagickCore-6.Q16.so.6 が見つからなくなった話

## 状況の説明

私のRailsプロジェクトでは、画像処理に`ImageMagick`を利用しており、特に`rmagick`というGemを使っています。Ubuntuを`22.04`から`24.04`にアップグレードした後、アプリケーションをデプロイしようとしたところ、次のようなエラーが発生しました。

“`zsh
LoadError: libMagickCore-6.Q16.so.6: cannot open shared object file: No such file or directory – /deploy/apps/langfix/shared/bundle/ruby/3.3.0/gems/rmagick-6.0.1/lib/RMagick2.so (LoadError)
“`

このエラーは、`libMagickCore-6.Q16.so.6`という`ImageMagick`のライブラリが見つからないことを示しています。

## 原因

Ubuntuのバージョンアップによって、多くのライブラリも更新されます。その結果、依存関係にあるライブラリのバージョンが変更され

元記事を表示

【ElasticBeanstalk】新規環境構築をする時に、DBを作成しなければ!

どうもこんにちは。

今回はRailsを動かすためのEB環境を構築した時にDBの作成を忘れてつまづいたので、メモします。

# 前提

今回は、`RDS`と`ElasticBeanstalk`の作成は済んでいることとして話を進めます。

# ぶつかった壁

`RDS`と`ElasticBeanstalk`を作成し、開発したRailsアプリケーションをデプロイしました。

すると、以下のようなエラーが出てきました。

“`ruby
Unknown DataBase
“`

RDS作成したのにデータベースがない???

# 結論

結論として、RDSを作成しただけでは、データベースは作成されないようです。

RDSは、**データベースを作成するための箱**だと解釈しました。

なので、AWSのセッションマネージャー or SSH接続(`eb ssh`)でEB環境に接続して、データベースを作成するコマンドを叩く必要があります。

以下の手順で作成できます。

“`sh
$ eb ssh
“`

“`sql
> mysql -u ユーザ名 -h ホスト名 -p
— パスワードを求め

元記事を表示

【rails】renderデプロイ時の[ActiveSupport::MessageEncryptor::InvalidMessage]

## はじめに
renderでデプロイ時にcredentials.yml.encの設定がうまくかなかったので、備忘録に。

## 仕様
Rails7
dokcer
render

## デプロイ時のエラー
“`
ActiveSupport::MessageEncryptor::InvalidMessage
“`
暗号化されたメッセージを復号化できていない。
おそらくconfig/master.key の鍵が config/credentials.yml.enc の鍵穴と一致していない。

## credentials.yml/master.key の関係について
master.key を鍵、credentials.yml.enc を鍵穴に例えるとわかりやすいです。

credentials.yml.enc は暗号化されたデータ(例えば、アプリケーションのパスワードやAPIキー)で、このデータを読むためには特定の鍵が必要です。その鍵が master.key です。つまり、master.key を使って初めて credentials.yml.enc に格納された情報を解読(鍵を使

元記事を表示

【gem:Refileの使い方】Railsでの画像投稿機能の実装方法

プログラミング初心者に向けて、Ruby on Railsで画像投稿機能を実装する方法についてご紹介します。今回は「Refile」というgemを使って、[以前解説したRuby on Railsを使って作成したシンプルなToDoアプリ](https://taishi-official.com/2020/04/25/433/)を例に実装していきます。

## 【gem】Refileとは
「Refile」はRuby on Railsのgemで、ファイルアップロードを簡単に実装するためのライブラリです。Refileを使うことで、画像のアップロードやリサイズ、クロップなどが簡単にできます。

またRefileでアップロードされた画像はRailsのActiveRecordを使用して、データベースに画像を保存することができます。GitHub上でオープンソースとして公開されています。

[>> 「Refile」のGitHub](https://github.com/refile/refile)

## 【gem】Refileを使って画像投稿機能の実装
### Gemfileに追記する
ge

元記事を表示

Rails基本アクションをゼロから理解するためのガイド

# はじめに
最近railsを本格的に使うようになりました。
基本アクションに沿ったページ作成ができるとデータ取得などが非常にやりやすいということを痛感しています。
そこで、各アクションがどのような用途で使われているのか違いを認識し適切なものが使えるように説明していきたいと思います。

# 作成
### `new`アクション
– **役割**: 新しいリソースを作成するためのフォームを表示するアクションです。`create`アクションとセットで使用されることが多く、ユーザーが入力フォームにアクセスできるようにします。
– **詳細**:
– **URLパターン**: `/users/new`, `/posts/new`
– **動作**: `User.new` で空のインスタンスを作成し、フォームに渡す。ビューにはフォームヘルパーを使って、フォームのフィールドが表示されます。
– **例**:
“`ruby
def new
@user = User.new
end
`

元記事を表示

【Datadog APM】謎の500エラーとの戦い【ddtrace】

# 概要

– Rails アプリを [`ddtrace`](https://github.com/DataDog/dd-trace-rb) gem を使って Datadog の APM でいろいろ見られるようにしている環境
– 通常は発生したエラーの種類などの情報が表示されるが、今回発生したエラーは原因が不明だった
– 手がかりとなる情報を追加でDatadogに送信し、原因を特定した

# 本編

ある日、Datadogのダッシュボードを見ると、なにやらエラーが増えていることに気づきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/1fe466b7-d525-f9e2-bf01-8bed46536191.png)

リクエストをエラー数順でソートすると、`resource name` が `POST 500` となっているリクエストが一番多くエラーになっていることがわかりました。

![image.png](https://qiita-image-store.s3

元記事を表示

OTHERカテゴリの最新記事