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

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

Railsチュートリアル第9章学習まとめ

## 9章

最近のWebサービスでは、ユーザーのログイン情報を任意で記憶しておき、ブラウザを再起動した後でもすぐにログインできる機能をremember meと言う。

永続cookie(permanent cookies)を使ってこの機能を実現していく。

ユーザーのログイン情報を長期間記憶する方法にを学ぶ。
その後、[remember me]チェックボックスを使って、ユーザーの任意でログイン情報を記憶する方法について学ぶ。

ということはレイヤーとして
・長期保存する機能
・ユーザーの任意で保存するかどうか決める機能
この2つがあるということですね。

## 9.1Remember me 機能
この機能を使うと、ユーザーが明示的にログアウトを実行しない限り、ログイン状態を維持することができるようになる。
ログインフォームにログインを継続するかどうかのチェックボックスも入れる。

## 記憶トークンと暗号化
Railsのsessionメソッドを使ってユーザーIDを保存しましたが、この情報はブラウザを閉じると消える。本節では、セッションの永続化の第一歩として記憶トークン(remembe

元記事を表示

【Rails】ノイズになる警告を一時的に抑制する方法あれこれ【乱用厳禁】

## はじめに
Railsの開発をしているとログやターミナルに警告が表示されることがあります。

たとえば以下はRSpecのテストコードを実行したときの実行結果です。
いくつか警告(warning)が表示されています。

“`
$ bundle exec rspec spec/models/user_spec.rb
warning: parser/current is loading parser/ruby31, which recognizes 3.1.4-compliant syntax, but you are running 3.1.3.
Please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
DEPRECATION WARNING: `Rails.application.secrets` is deprecated in favor of `Rails.application.credentials` and will be removed in Rails 7.2. (cal

元記事を表示

個人開発しているRails製のマイクロブログ「Mewst」の実装方針 (バックエンド編)

最近個人でコツコツ作っていたMewst (ミュースト) というマイクロブログサービスを公開しました。

[マイクロブログ「Mewst \(ミュースト\)」のベータ版をリリースしました \| shimba\.co](https://shimba.co/2024-04-27-mewst-beta)

Railsを使って実装していて、ソースコードも公開しています。

https://github.com/mewstcom/mewst

個人的な好みにより一般的なRailsアプリとは異なる方針で実装しているところがいくつかあるので、この記事ではそれらについてご紹介したいと思います。
個人開発でやっているものなので好き勝手やっています。

この記事を書き始めたときはバックエンドとフロントエンドどちらの方針も書こうかと思っていましたが、思っていたよりも長くなったため2つに分けることとしました。
フロントエンド編はあとで書くかもしれません。

## ルーティング定義には基本的に `match` だけを使用する

[github.com/mewstcom/mewst/config/routes.rb]

元記事を表示

ActiveAdminのカスタマイズ集 – 実用的で頻出な記法をコードサンプルにまとめてみた

## はじめに

ActiveAdminの使用を続ける中でカスタマイズ時に頻繁に使用する記法が見えてきたので、それらを詰め込んだコードサンプルを掲載します。

## コードサンプルの特徴

– ActiveAdminで `app/admin/…` に配置する1ファイルとして作成した
– 私がよく書く記法を詰め込み、TIPSとしても読めそうな内容にした
– テンプレートファイルにも流用できる構成を目指した
– なるべく公式ドキュメントに沿ったが、一部に公式外の記法も混ぜた

## 想定する読者

– ActiveAdminを使ったことがある人
– インストール方法については記載しません
– ActiveAdminの便利な記法やカスタマイズ方法を探している人

## バージョン情報

記事公開時点の最新バージョンを使用します。

– Ruby: `3.3.1`
– Ruby on Rails: `7.1.3`
– ActiveAdmin: `3.2.0`

## サンプルのテーブル構成

今回は図の中央にある `company_users` の管理画面を作成します。
has_man

元記事を表示

ひよっこエンジニア、チーム開発で心が救われる

# チーム開発に心が救われた話

## 目次
1. 自己紹介
1. 開発しているサービス:Brighty
1. 結論
1. ターゲット
1. 技術力が向上
1. 誰かと一緒に開発する楽しさ
1. おわりに

### **自己紹介**

AWSのLambdaを使用しているときdeployをし忘れて一日詰まっていたひよっこエンジニアで中野と申します!都内でWEBエンジニアをしております!

現在、お仕事とは別にBrightyというコーチングに特化したサービスのチーム開発を行なっております。とっても楽しいので多くの人に知ってもらいたいと思っております!

業務外でもエンジニアとしてのスキルアップがしたいなぁ〜と思っているときに、Twitter(X)でチーム開発の募集を発見?!👀すぐにDMで応募しました。

## **開発しているサービス : [Brighty](https://brighty-v0.studio.site/)**

尊敬してやまないフリーランスエンジニアの[なるさん](https://twitter.com/1026NT)が始めたサービスです。「コーチングの民主化」をミッショ

元記事を表示

ストロングパラメーターについて

ストロングパラメーターの理解が難しいので一度整理します。

### 1.ストロングパラメーターとは
Web上で受け取ったパラメーター(変数)が安全かどうかを検証したうえで取得する仕組み。
安全ではない(意図しない)データの登録や更新を未然に防ぐことができる。

### 2.仕組み
メソッドにあらかじめ許可するカラムを指定しておく。

### 3.対象のデータ
ユーザーがフォームから入力した内容。
(viewから送られてきた情報)

### 4.対象の機能
登録・更新機能。
(コントローラー上で定義されたcreate.updateメソッド)

### 5.deviseを使った場合とそうでない場合を整理
#### deviseを使っていない場合
コントローラーにストロングパラメーターを記述。
permitメソッドを使って許可するキー(カラム名)を記述する。
“`ruby:user_controller.rb
private
def user_params
params.require(:user).permit(:email, :nickname)
end
“`
上記の場合、**

元記事を表示

JavaScript ページをリロードしないと動かない(RubyonRails)

RubyonRailsにてフリマアプリ実装中、JavaScriptがうまく動かなかった件について。
初学者のアウトプット用記事なので、情報の信憑性の低さについてはご容赦ください。同じところで苦戦している初学者の方にも参考になれば幸いです。

当記事はRails7で実装した際の記録であり、具体的にはgemfileに以下のTurbolinksに関する記述がある場合を想定しています。該当しない場合は、当記事の内容が合わない場合がありますのでご注意ください。

“`ruby:gemfile
# Hotwire’s SPA-like page accelerator [https://turbo.hotwired.dev]
gem “turbo-rails”
“`

# 不具合の具体的な内容
商品出品ページで販売価格を入力した時に、販売手数料と利益も同時に表示されるようにしたい。JavaScriptの実装後、ローカル環境で動作を確認したときに問題発生。JavaScriptのコードは問題なく書けているのに、商品出品ページに遷移しても動かない。なぜ?

商品出品ページを開いた状態でリロードする

元記事を表示

Rubyの等値を判断するメソッド・演算子の理解[equal?, ==, eql?, ===]の違い

# equal?, ==, eql?, ===の違いを解説

この記事は下記のような人を対象にしています。
– 駆け出しRubyエンジニア
– プログラミング初学者

## 結論
equal・・・同じobject_idの場合にtrueを返す
== ・・・人の目で見て自然であればtrueを返す
eql・・・同じクラスで中身も同じならtrue、中身が同じでも別クラスだったらfalseを返す
=== ・・・case文のwhen節で暗黙的に使われている

## equal?
equal?メソッドは、同じobject_idの場合にtrueを返します。
“`ruby
a = “apple”
b = “apple”
a.equal?(b)
=> false
“`
文字列の内容が同じappleなのに、falseなのは、aとbそれぞれが持つobject_idが異なるから。

では、object_idとは??

オブジェクトにランダムに割り当てられる、重複しない整数のこと!

Rubyでは、重複しない整数が、各オブジェクトに1つずつ割り当てられています。
各オブジェクトに対して一意な整数を返します。あ

元記事を表示

Qiitaのクローンアプリを作成してアプリ開発体験を経験してみた

### はじめに
エンジニアとして技術力を磨きたいと思い、実際にアプリを設計から実装まで一貫して体系的に学習することを実践しました。
ただ、作りたいアプリがパッと思いつかなかったためQiitaを参考に必要な機能に絞ったクローンアプリを選択しました。

### 使用技術
案件では主に保守運用として調査タスクをメインとしているためコードリーディングは行いますが実装する機会は少ないため技術部分を深く理解できていないところがあるなと自分で感じることがあります。

そのため技術に関しては案件で利用しているrailsとnuxtを選択して実際にその言語で実装をしてみることによりベースとなる実装面での知識を深めていきたいなと思いました。
“`
Ruby on rails 7.0.6
Nuxt 2.15.8
Mysql 8.0
Docker
“`

### アプリ概要
Qiitaといえばエンジニアがアウトプットや質問を投稿できるプラットフォームですが、今回はアウトプットを投稿できる簡易的なTODOアプリに絞って開発をしていくことにしました。
“`
– ログイン機能
– ユーザー登録情報を元に認証

元記事を表示

POSTメソッドがGETメソッドになるエラーの解消法

Railsのアプリケーションにおいて、HTTPメソッドが期待どおりに動作しないという問題に直面しました。ここでは、問題の原因とその解決策について説明します。

## 問題の概要

– お気に入りに追加するためのボタンがクリックされても、お気に入り登録されませんでした。
– ボタンは`button_to`ヘルパーを使用しており、`POST`リクエストを送信することが期待されていました。

## 原因

原因は、`button_to`が`form_with`の内部に配置されていたため、ネストされたフォームが作成されていました。これは、HTMLのフォームの中に別のフォームをネストすることはできないというルールに反しています。結果として、`button_to`による`POST`リクエストが発生しなくなっていました。

## 解決策

解決策として、`button_to`を`link_to`に置き換え、`data-turbo-method`属性を使用して`POST`リクエストを送信するように変更しました。

“`変更前.erb
<%= button_to 'お気に入りに追加', favorit

元記事を表示

Active storageを使ってS3(AWS)へのアップロードとHerokuデプロイ

この記事はプログラミング学習者がActive storage、S3(AWS)を使って本番環境(Heroku)にデプロイするまでに躓いたところを備忘録も兼ねてまとめたものです。
内容に間違いがありましたら、ご指摘頂けると助かります。

動作環境
Ruby: 3.2.1
Rails: 7.0.0
Postgresql: 14
Docker
PC: M2 Mac OS Sonoma 14.4.1

# 1, Active storageの導入
Active storageとはRails5.2から導入されたファイルアップロード機能です。
Active Storageを用いることで画像、PDF、動画をローカル環境だけでなくAmazon S3、Microsoft Azure Storage、Google Cloud Storageからなるクラウドストレージにもファイルをアップロードすることができます。
※今回はローカルとAmazon S3へのアップロードを目的として設定しました。

Active Storageを使用するために事前のインストール作業を進めていきます。
“`
$ bin/rails

元記事を表示

renderを使用する際に生じるエラーと変数の取得について

## 導入
Ruby on RailsのDeviseは強力な認証ソリューションを提供しますが、時として複数のモデルを管理する際に予期しない振る舞いに直面することがあります。今回のケーススタディでは、複数モデルでのログインを避けるための対処法を探求しました。

## 問題発生

あるRailsアプリケーションにて、予約確認のアクションを処理中に`NoMethodError`が発生しました。

“`
NoMethodError at /reservations/confirm
undefined method `reject’ for nil:NilClass
“`

コードの該当部分は以下の通りです:

“`ruby
# app/controllers/reservations_controller.rb
def confirm

@services = Service.where(id: reservation_params[:service_ids].reject(&:blank?))

end
“`

このエラーは、`reservation_para

元記事を表示

Deviseにおける複数モデルでのログインを避ける方法

## はじめに
Railsの認証システムであるDeviseは、非常に強力で柔軟性がありますが、複数のユーザーモデルを管理する際には注意が必要です。特に、異なるユーザーモデル間での同時ログインを避けたい場合、デフォルトの設定では対応できないことがあります。この記事では、Deviseを使用して、複数のモデルで同時ログインが発生しないようにする方法を説明します。

## 課題の説明
Deviseを使って複数のモデル(例えば、Company、Staff、AdminUser)を認証管理している場合、一つのブラウザセッションで複数のモデルに同時にログインされると予期せぬ問題やセキュリティリスクが生じる可能性があります。特に、管理者としてログインしている状態で他のユーザーを作成し、そのユーザーが自動的にログインされる場合、問題が複雑化します。

## 解決策の実装
### Deviseの設定変更
まず、Deviseの設定を変更して、複数のログインを一度に管理しないようにします。

“`ruby
# config/initializers/devise.rb
Devise.setup do |con

元記事を表示

「ローカル環境 × Rails × Render」でデプロイ

# はじめに

皆さま、こんにちは、すみ(@sumisumi2000) と申します。
2024 年 1 月 20 日より、オンラインプログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

今回の記事では Docker を使わずに、ローカルで環境構築を行い、 Render.com でデプロイ&データベース連携するまでの流れをまとめました。

https://render.com/

# 動作環境

– macOS Sonoma 14.4.1
– Ruby 3.3.0
– Rails 7.1.3.2

# ローカル環境構築

この記事では Docker を使用しません。
なので、ローカル環境(自身のパソコンの環境)で Ruby や Rails などをインストールする必要があります。

### 目次

1. [Homebrew のインストール](#homebrew-のインストール)
2. [rbenv のインストール](#rbenv-のインストール)
3. [Ruby のインストール](#ruby-のインストール)
4. [Rails のインストール]

元記事を表示

railsの環境構築を半日かけて構築した話

こんにちは!初投稿です!
今回は半日近く格闘をしたrailsの環境構築の話を備忘録を兼ねてお話ししたいと思います。
環境はDockerで構築しました。

## Dockerを立ち上げるまで
“`
$cd 作業フォルダ
$docker compose build
$docker compose up -d
“`
上記で、Dockerを立ち上げていきます。

## Dockerに入る
“`
$docker compose exec web bash
“`

## 諸々インストール
“`
$bundle install
$yarn install
“`
上記で、構築に必要なものをインストールしていきます。
bunle⇨ライブラリをインストール
yarn⇨パッケージを一括管理できる

## エラーが起きたコマンド
“`
$bin/rails db:create
“`
こちらを入力した際、下記のエラーが発生した。
“`
Caused by:
Mysql2::Error::ConnectionError: Unknown MySQL server host ‘db’ (-2)
`

元記事を表示

[Rails] Delayed_Jobのテーブル構成についてまとめた。

### 概要
`DelayedJob`のテーブル構成(列構成)についてまとめました。

### DelayedJobとは…?
RailsでJOBを非同期処理するための`gem` です。

`DelayedJob`はデータベースをキューとして利用します。

つまり、実行するジョブの情報をデータベースに保存し、その情報を基に非同期でJOBを処理する方式ということです。

### DBのカラム構成
上記を踏まえてテーブル構成を見ていきましょう

| カラム名 | 役割 |
| ———— | ——————————————————————————————————————– |
| `id`

元記事を表示

Railsにおけるモデルのscopeメソッド

# はじめに
先日、業務で`scope`メソッドでの実装したので、備忘録として記事にしたいと思います。

この記事では、`scope`メソッドの基本的な使い方をまとめてみました。

# モデルのscopeメソッドとは?

`scope`メソッドは、よく使用されるクエリをメソッドとして定義することができる機能です。

これにより、複雑なクエリを簡単に再利用できるようになります。

# Scopeメソッドの基本構文

`scope`メソッドの基本的な構文は以下のようになります。

“`ruby
scope :scope_name, -> { query }
“`

– `scope_name`: スコープの名前を指定します。
– `query`: 実行するクエリを指定します。

# Scopeメソッドの使用例

今回は、記事の一覧表示で人気の記事を取得する処理を例に見ていきます。

### scopeを使わないパターン

`scope`を使わずに人気の記事を取得する場合、以下のようにクエリを書くことになります。

“`ruby
# app/models/post.rb
class P

元記事を表示

生まれたてのuserマイグレーションファイルをじっくり見てみた

ユーザー管理機能の実装時に用いられるdeviseライブラリ。
それによって生成できるuserモデルと勝手に爆誕するuserマイグレーションファイル。

今回はモデル生成により勝手に下界に君臨してしまった**userマイグレーションファイル**について、暇なので観察することにする。

特に今回は、**生まれたての状態時**を見ていく。

# userマイグレーションファイル爆誕
`rails g model user`と手慣れたようにコマンドを打ち込むと、以下のとおりマイグレーションファイルが勝手にできる。(事前にdeviseのインストールはしておくんだお)

“`
db/migrate/xxxxxxxxxx_devise_create_users.rb
“`

記述は以下のとおり
“`ruby
# frozen_string_literal: true

class DeviseCreateUsers < ActiveRecord::Migration[7.0] def change create_table :users do |t| ## Datab

元記事を表示

Devise使用時にログイン中のモデルと異なるモデルを編集する方法(CompanyでログインしてStaffの編集・更新)

## 概要
この記事では、RailsアプリケーションでDeviseとCanCanCanを使用して、`Company` と `Staff` という二つのユーザーモデルを効果的に管理する方法を紹介します。
特に、`Company` モデルでログインしている状態で `Staff` モデルのデータを編集できるようにする際に生じた以下のエラーの解消法を詳しく解説します。

“`bash
Completed 401 Unauthorized in 0ms (ActiveRecord: 0.0ms | Allocations: 209)
“`
※ブラウザでリンクを選択後、アクションに遷移する前に上記のエラーが生じたため、deviseの認証関連が原因ではないかとあたりをつけました。

## 1. 導入
本記事では、企業とその従業員をそれぞれ `Company` と `Staff` モデルで管理するシナリオを想定しています。各モデルはDeviseによって認証が行われ、CanCanCanでアクセス権限が管理されます。この設定を通じて、モデルごとの認証と権限のカスタマイズ方法を学びます。

## 2.

元記事を表示

gem install 時の permissions エラーの対応

いまさらながらGithub Pagesでプロフィールでも整備するかと思い立ち、おもむろにgem install したらpermissions error に遭遇しました。

“`
% gem install bundler jekyll
Fetching bundler-2.5.9.gem
ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
“`

下の記事によるとどうやらシステムのrubyを利用していると、権限不足でgemのインストールができないというエラーのようです。

https://qiita.com/nishina555/items/63ebd4a508a09c481150

ということで、gem install bundler jekyll ができるところまで手順を残しておきます。

– 環境
macOS Ventura

# 現状確認

“`

元記事を表示

OTHERカテゴリの最新記事