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

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

devise 退会済みユーザー ログイン実行「すでにログインしています。」と出る件

# はじめに
ポートフォリオの最終チェックしていると、退会済みユーザーがログインできてしまうことが発覚😱
前まではちゃんとブロックできてたのに…
ということで解決したのでアウトプットしておきます✍️

# 現象

退会済みのユーザー情報でログインを実行するとこのようになります

![スクリーンショット 2024-07-17 16.13.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/385d0bf0-f709-8173-20d1-2e212d1c64b9.png)

“`sessions_controllre.rb
# frozen_string_literal: true

class Public::SessionsController < Devise::SessionsController before_action :user_status, only: [:create] : private # アクティブ判断メソッド def user_status

元記事を表示

Railsでhaml-rails gemをインストールしたのに新規生成されるviewファイルが全部erb拡張子になってた話

## 読んで欲しい人

– hamlをインストールしたのに、自動生成されるファイルの拡張子が全部.erbになって困っている人
– 過去の俺

## 動作環境

– Ruby 3.3.0
– Rails 7.1.3.4

## エラー内容

– gemfileにhaml-railsの記述があるのに、generateコマンドで生成されるviewファイルの拡張子が.erbになっている

“`ruby

# gemfileの中身

source ‘https://rubygems.org’

ruby ‘3.3.0’

gem ‘rails’, ‘~> 7.1.3’, ‘>= 7.1.3.2’

gem ‘bootsnap’, require: false
gem ‘pg’, ‘~> 1.1’
gem ‘puma’, ‘>= 5.0’
gem ‘sprockets-rails’
gem ‘stimulus-rails’
gem ‘turbo-rails’
gem ‘haml-rails’ #hamlを使用できるようにするgem
gem ‘html2haml’ #erbをhamlに変えてくれる

元記事を表示

Rspecを始めて行う

“`
bundle exec rspec spec/models
“`
このディレクトリ以下のテストを実行する

“`ruby
RSpec.describe User, type: :model do
context “with 2 or more comments” do
it “orders them in reverse chronologically” do
user = User.create!(:name => “hogehoge”, :email => “gehogeho”, :forign => 1)
expect(user).to eq(user)
end
end
end
“`
テストのコメントは出鱈目です。(後でやります)
“`ruby
expect(user).to eq(user)
“`
In RSpec, assertions are called expectations, and every expectation is built around a matcher. When you expec

元記事を表示

日にちの始まりを取得する方法

「前日に」いいねされた記事を取得するという実装をするために、日にちの始まりと終わりを簡単に取得する方法を調べたので、備忘録として残しておきます!
## 日にちの始まりを取得する方法
“`ruby
time = Time.current
=> Wed, 17 Jul 2024 13:58:08.985319000 JST +09:00
time.beginning_of_day
=> Wed, 17 Jul 2024 00:00:00.000000000 JST +09:00
“`
他にも日にちを取得する便利なメソッドが多数用意されていました。
“`ruby
# 日にちの終わりを取得する
>> time.end_of_day
=> Wed, 17 Jul 2024 23:59:59.999999999 JST +09:00

# 日にちの年の始まりを取得する
>> time.beginning_of_year
=> Mon, 01 Jan 2024 00:00:00.000000000 JST +09:00

# 日にちの週の始まりを取得する
>> time.beginning_o

元記事を表示

Javascriptでバリデーションを実装

# はじめに
前回に引き続きbootstrapのモーダル機能で新規登録・ログインフォームを作成方法をアウトプットします✍️

https://qiita.com/3rarara/items/6450603f2ea29f5d7793

初心者ですので、もっといい方法があるよ!
等ございましたらご教示いただけますと幸いです!

# 開発環境
– ruby: 3.1.2
– Rails: 6.1.7.7
– Cloud9
– bootstrap: 4.6.2

# 前提条件
– bootstrap4.6.2 導入済み
– devise 導入済み

# Javascriptでバリデーションを実装
新規登録やログインにエラーが発生した時、
deviseの使用上元の(モーダルでない)新規登録ページやログインページに飛んでしまいます
ログインを非同期で行うことも試みましたが挫折しました…
なので、今回はJavascriptで簡単なバリデーションをつけていきたいと思います
コード全体だけ見たいよ〜という方はこちらをクリックしてください↓

Javascriptコード

元記事を表示

bootstrapモーダル で ログイン認証

# はじめに
ポートフォリオに機能追加中です!
bootstrapのモーダル機能を使って新規登録・ログインフォームを作成したのでアウトプットします✍️
ログイン認証機能はdeviseを使用していますが、
モーダルのフォームについては、Javascriptでバリデーションを実装します

初心者ですので、もっといい方法があるよ!
等ございましたらご教示いただけますと幸いです!

# 完成物
[![Image from Gyazo](https://i.gyazo.com/378162453b356670e6bd3448172d7668.gif)](https://gyazo.com/378162453b356670e6bd3448172d7668)

# 開発環境
– ruby: 3.1.2
– Rails: 6.1.7.7
– Cloud9
– bootstrap: 4.6.2

# 前提条件
– bootstrap4.6.2 導入済み
– devise 導入済み

# モーダルの実装
ヘッターの新規登録ボタンとログインボタンをクリックするとモーダルのフォームが表示されるよう実装します

元記事を表示

【Rails7】Maps JavaScript APIで住所オートコンプリート入力の新規投稿機能を実装する

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして働き始めて約4ヶ月が経過しました🐣

## 概要
だいぶ期間が空いてしまいましたが、前回の
[【Rails7】Maps JavaScript APIを使って投稿を地図上にピンで表示する](https://qiita.com/lemonade_37/items/51ca0f18fd9da842bb00)
の続きとして、位置情報を含んだMapと連動できる新規投稿機能を実装していきます。

### 完成イメージ図

![qiita02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471604/3b8b4830-58d7-7454-715e-11a980d9cbdf.gif)

![qiita01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34716

元記事を表示

Rails5.1以前と以降のデータ型の違いによるマイグレーションエラーの解決方法

## はじめに
Rails6.1で`references`を使って既存のテーブルを参照する新しいテーブルを作成しようとした際、エラーに遭遇しました。

エラーの内容とその原因・解決方法をまとめます。

## エラーの概要
### やりたいこと
既存の`User`テーブルを参照して新たに`SocialLink`(SNSなどの外部サービスのリンクを保持する)テーブルを作成したい。

### 使用したマイグレーションファイル
“`ruby
class CreateSocialLinks < ActiveRecord::Migration[6.1] def change create_table :social_links do |t| t.references :user, null: false, foreign_key: true t.string :type, null: false t.string :url, null: false t.timestamps end end end

元記事を表示

テーブルのレコードをコピペする

# rspecを実行時のエラー
“`
1) User with 2 or more comments orders them in reverse chronologically
Failure/Error: user = User.create!(:name => “hogehoge”, :email => “gehogeho”, :password => “gehogeho”, :forign => 1)

ActiveRecord::InvalidForeignKey:
Mysql2::Error: Cannot add or update a child row: a foreign key constraint fails (`test`.`users`, CONSTRAINT `fk_rails_8f8a4b3fcb` FOREIGN KEY (`forign`) REFERENCES `forign` (`id`))
# ./spec/models/user_spec.rb:6:in `block (3 levels

元記事を表示

エンジニアとしてフルリモートワークで8年生き残るための技術スタック

こんにちは。[吉田智哉](https://twitter.com/tomoya_y0shida)です。
岩手県盛岡市に住みながらエンジニアとしてフルリモートワークで東京の開発案件を請けてます。
気が付くとこの働き方で8年間も経過していました。
8年生き残ることができた技術スタックをシェアしたいと思います。
今までの8年間で、これから先はどうなるかわかりませんが、これらを軸に守備範囲を広げていけば、
これからもフルリモートワークで生き残っていけるのではないかと思っています。

## Ruby on Rails

Ruby on Railsは私がエンジニアになるきっかけとなったフレームワークです。
リモート案件が多いので、リモートワークしたい人であればRuby on Railsを学ぶといいでしょう。
GolangやTypescriptに押され気味な感じもしますが、実際に転職エージェントやフリーランスエージェント,
Wantedlyで案件を探してみるとまだまだRuby on Rails案件は多いです。
8年前から今までも十分にリモート案件が存在します。
YoutubeやXなどのナノインフルエ

元記事を表示

AIを使って個人開発のアイデアを出しまくる・ブラッシュアップしまくる

## AI機能追加🚀 個人開発をもっと楽にしたい話

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498701/3193f961-ced5-5651-5297-49eb5fc9f6c8.png)

## 目次
1. なんでAIを入れるの?
2. 新機能紹介
3. 気になるお金の話
4. 個人開発を盛り上げたい
5. まとめ

## 1. なんでAIを入れるの?

答えからいうと、「個人開発をスムーズにして、ideeeの価値を格段に上げたから」です!

ideee(アイディー)とは「アイデアとエンジニアのマッチングプラットフォーム」として生まれました。
おかげさまでアイデアを見にきてくれる方、アイデアをブラッシュアップしたいと投稿する方によって、ideeeは利用されてきました。
気づけばアイデアは500を超え、ユーザー数も約1500人に!

https://ideee.tech/about?utm_source=qiita&utm_medium=article&utm_id=ai_upd

元記事を表示

RSpec入門:基本構文と使い方を紹介

# はじめに

こんにちは!
社会人一年目の石川です。
記事をご覧いただきありがとうございます。

現在、私はRSpecを勉強中で、学んだことを共有したいと思いこの記事を書きました。この記事では、RSpecの基本的な書き方を紹介し、具体的な例を通して理解を深めていきます。
初心者でも理解しやすいように書いたのでRSpecを勉強したい際はぜひ参考にしてください。

## 目次
1. [RSpecとは?](#rspecとは)
1. [基本的なRSpecの書き方](#基本的なrspecの書き方)
・[describe、context、itの使い方](#describecontextitの使い方)
・[最初のテストケースの例](#最初のテストケースの例)
3. [よく使われるマッチャ(Matchers)](#よく使われるマッチャmatchers)
・[eq、be、include、matchなどの基本的なマッチャ](#eqbeincludematchなどの基本的なマッチャ)
・[複数のマッチャを使用した例](#複数のマッチャを使用した例)
4. [最後に](#最後に)

## RSpecとは?

元記事を表示

[Rails] any?メソッドとは?をまとめた

# any? メソッドとは
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/any=3f.html

配列の要素が、全て**偽**の場合、`false`を返します。
一つでも**真**の要素があれば、`true`を返すメソッドになります。

# 例

“`rb
p [nil, true, 99].any? # => true
p [nil, false, 99].any? # => false
“`

# ブロックを使用する
ブロックを伴う場合は、各要素に評価され、全て**偽**の場合、`false`を返します。
評価の時点で真を返した時点で、`true`を返します。

“`rb
p [5, 10].any? {|v| v > 20 } # => false
p [5, 10].any? {|v| v > 6 } # => true
“`

# 引数を使用する
引数を渡して、処理することもできます。

ブロックと同じで、引数で渡したオブジェクトと各要素が一致するか評価され、全て**偽**の場合、`false`を

元記事を表示

Rails6.0 → 6.1にバージョンアップする手順

# はじめに
Railsのバージョンアップの対応を皆さん行ったことはありますでしょうか?
今回は、6.0から6.1へバージョンアップを行ったので、**対応の進め方**を主にまとめています。

参考になれば、幸いです。

:::note info
本記事の対象
– バージョンアップ対応の進め方が知りたい人
:::

:::note warn
本記事の対象外
– 具体的な対応策が知りたい人
:::

早速ですが、今回どのような手順で進めたのか、以下にまとめました。

# 手順
1. バージョンアップの進め方確認
1. ゴールの設定
1. テスト方法の確認
1. バージョンアップ作業
1. テスト準備
1. テスト実施
1. 本番反映

では、一つずつ詳細を見ていきましょう。

## バージョンアップの進め方確認
まずは全体感をしっかり掴みましょう。個人的には、公式と以下の記事がおすすめです。

https://railsguides.jp/upgrading_ruby_on_rails.html

https://qiita.com/jnchito/items/0ee47108972a0e

元記事を表示

レンダリングを減らしたい

## はじめに
そこまでログを意識していなければ、レンダリングがログに出ていても見過ごしてしまうと思います。
ただ、レンダリングはパフォーマンスに影響するので改善できるならしておきたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/794432a8-6c4f-77b5-ee7f-2d7a2cc50bcf.png)

今回はレンダリングを減らす方法を試してみたいと思います。

## レンダリングを減らす方法
railsでレンダリングを減らす方法は、collectionです。
collectionを使って、同じレンダリングを再利用してあげれば良いです。
今回はcollectionのやり方で詰まったところもあったのでその部分も紹介していきます。

### 部分テンプレートの部分をひとつにまとめる
scaffoldでusersテーブルと関連ファイルを作成します。
`index.html.erb`はこのように記載されていると思います。
`<%= render user %>`

元記事を表示

dockerを使用したRuby on Rails7の環境構築について

## dockerとは何か
1台のサーバー上に、コンテナという複数のアプリケーション実行環境(開発環境)を構築でき、開発環境の共有や移転を簡単に行うことができるツールです。OSやハードウェアを問わずに実行できるため、Windows+Linuxのように、複数OSでアプリケーションの動作を確認したり共有したりする際にも適しています。
dockerを使用することで、動作の一貫性を保証することができ、環境構築における手間を大きく削減することが可能です。
## 使用したきっかけ
Railsチュートリアルに取り組むにあたって、codespaceというgithubを使用した開発環境で進めていましたが、より実践に近い、自分の力で開発環境を構築してみようと思ったからです。

## 環境構築方法
早速環境構築を行なっていきます。dockerはインストール済みであることが前提で進めるため、まだの方は以下からインストールを行なってください。

https://docs.docker.com/get-docker/?_gl=1*1w46cmq*_gcl_

元記事を表示

SQLクエリをview側に表示してみる

## はじめに
各ページで発行されたSQLクエリはログを見れば分かります。
ただ、そのログをview側で確認してみたいといったとき、やり方を知らなかったので今回やってみました。

## SQLクエリをview側に表示する
やり方は考えれば色々あると思いますが、今回は`ActiveSupport`を使用してログを表示してみたいと思います。

### `application_controller.rb`にインスタンス変数を定義

“`rb:app/controllers/application_controller.rb
class ApplicationController < ActionController::Base before_action :setup_query_logs private def setup_query_logs @query_logs = [] ActiveSupport::Notifications.subscribe "sql.active_record" do |name, started, finished, u

元記事を表示

マイグレーションで使用するadd_indexの役割について

## 経緯
Railsチュートリアルを進めていく中で、マイグレーションファイルにadd_indexという記述を行なっていましたが、具体的に使い方がいまいちわからなかったため、調べた結果をまとめます。

## add_indexがなぜ必要なのか
結論から言うと、データベースの処理を高速化できるから。
通常該当のデータをデータベースから検索する際には、DBは1から10まで全てのデータを検索し、該当のデータが存在するかどうかを検索します。(フルスキャン)
add_indexがあると、検索しやすいようにデータを並び替え、必要なデータを取得しやすくできるようになります。(木構造という検索方法でデータを並び替えています。このあたりの説明は、アルゴリズムのお話になるので今回は省略します。)
Railsチュートリアルでは、Twitterのようなユーザーをフォローする機能、される機能を作成していますが、これらを登録するカラムを作成する際に、インデックスを設定しています。高い頻度でアクセスするこれらのデータに追加することで、DBにかかる負荷を軽減し、レスポンスを高速でできるようになります。
“`
cla

元記事を表示

Everyday Rails – RSpecによるRailsテスト入門を読んだ

# はじめに
今回railsの学習に伴いテストフレームワークの学習として
Everyday Railsを読みましたのでそのアウトプットとして本記事を作成しました。
# 学んだこと
* **意味のあるテストデータの作成**
* Factory Bot
* テストにおけるサンプルデータを作成するためのgem
* “`bin/rails g factory_bot:model モデル名“`でファクトリのファイルを作成
* 以下ファクトリの構成例。用意するとスペック全体でファクトリが使用可能になる。
“`
FactoryBot.definedo
factory :モデル名 do
//データを囲む中括弧({})は必須
カラム1 { “test1” }
カラム2 { true }
カラム3 { 1234 }
end
end
“`
* “`FactoryBot.build(:モデル)“`のような

元記事を表示

【紹介】「認可」を実装する方法3選_Rails

# はじめに
「認証」は、多くのRailsアプリケーションで、`devise`が使用されているかと思います。
ただ、「認可」に関しては、皆さんどのように実装されていますでしょうか?

今回実装するにあたって、考えた方法を3つご紹介いたします。

:::note warn
「認証」と「認可」の違いに関しては、本記事では解説いたしません。
詳しくは、以下の記事が参考になりますので、ご覧ください。
:::

今さら聞けない認証と認可の違い ゼロトラストセキュリティ対策

# 3選の紹介
## ① Pundit ・ cancancan
https://github.com/varvet/pundit

https://github.com/CanCanCommunity/cancancan

上記2つとも、認可周りをサポートしてくれるgemです。
ライブラリを使用すると、実装が楽になるのはとても良いですね。

昔からあるイメージですが

元記事を表示

OTHERカテゴリの最新記事