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

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

【Rails】非同期通信化※復習用

## 1. **いいね機能の非同期通信化の手順**

### ステップ1: **コントローラの設定**
`FavoritesController`に非同期通信をサポートするための`create`と`destroy`アクションを設定します。

“`ruby
class FavoritesController < ApplicationController before_action :authenticate_user! def create @book = Book.find(params[:book_id]) current_user.favorites.create(book_id: @book.id) respond_to do |format| format.js # create.js.erbを呼び出す end end def destroy @book = Book.find(params[:book_id]) current_user.favorites.find_by(b

元記事を表示

raisのパラメーターについて

## paramsについて
コントローラー内でリクエストから送信されたパラメータを扱うためのメソッドです。これを使うことで、フォームから送信されたデータやURLのクエリパラメータを簡単に取得できます。
### 基本的な使い方

1. **フォームデータの取得**:
フォームから送信されたデータは`params`を使って取得できます。例えば、以下のようなフォームがあります。

~~~html




~~~
このフォームが送信されると、コントローラーでは以下のようにデータを取得できます。

~~~ruby
defcreate
@question = Question.new(params[:question])
if @question.save

元記事を表示

【Rails】検索機能の実装※自己振り返り用

### ステップ 1: `searches` コントローラの作成

まず、検索専用のコントローラを作成し、ユーザーや投稿(Book)の検索ロジックを実装します。

“`bash
rails g controller searches
“`

– `rails g controller searches`: 検索機能用のコントローラを作成します。このコントローラで検索処理を行います。

#### コントローラの中身 (`app/controllers/searches_controller.rb`)

“`ruby
class SearchesController < ApplicationController before_action :authenticate_user! # ログインしているユーザーのみが検索可能にする def search @model = params[:model] # 検索対象("user" か "book")を取得するための変数 @search_method = params[:search_method] # 検

元記事を表示

Railsプロジェクトのライセンスを調査した

「Railsプロジェクトで使用しているOSSライセンスを出力したい」という要件があったので、OSSライセンスを [pivotal/LicenseFinder](https://github.com/pivotal/LicenseFinder) を使用して調べてみました。

https://qiita.com/mtsuge/items/9e08ff2570effcf6d47c

この記事を参考にしましたが、時間が経ってオプションが変わっていました。

## `pivotal/LicenseFinder` を使う

### インストール

無駄な依存関係が増えてしまうため、あまり好ましくないけど `Gemfile` に以下を追加して `bundle install` を実行します。

“`ruby
gem ‘license_finder’, :group => :development
“`

`Gemfile` より直接インストールするこちらのほうが良いみたいです。

“`bash
$ gem install license_finder
“`

とりあえずライセンスの情報を出力

元記事を表示

RailsでのTailwindの画像path

##### 今回私は、わからずに苦戦していたのでメモ✍️をします。
画像ファイルは、 ***app/assets/images/test.jpg*** においています。

**tailwind.config.js**
“`
module.exports = {
theme: {
extend: {},
backgroundImage: {
“top-bg”: “url(‘./app/assets/images/test.jpg’)”
},
},
};
“`
**app/views/home/index.html.erb**
“`

“`
backgroundImageに画像ファイルがある ***url(‘./app/assets/images/test.jpg’)*** にしたら
localサーバーで確認しても画像が表示されませんでした。

#### 出来なかった理由
###### Railsのアセットパイプライン
R

元記事を表示

【Ruby on Rails】caxlsx_railsを使用して簡単にExcel出力!

# はじめに

こんにちは、未経験エンジニア3年目の嶋田です。

今回は、RailsアプリケーションでExcelファイル(`.xlsx`形式)を生成するためのGem
**caxlsx_rails**についてご紹介します。

Webサービスの管理画面によくある「ダウンロード」機能ですが、
皆さんも見たことあるのではないでしょうか??

![csvダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524119/71ddf3b8-dd50-1c9f-a211-a03fe0edf160.png)

CSVでの実装が多かったのですが、
初めてExcel形式での出力を実装する機会がありました。

調べてみると…
> 昨今ではダウンロード機能を廃止するサイトが増加傾向にある

そうです。([参考](https://pig-data.jp/blog_news/blog/scraping-crawling/csv/))

そのため、今回はExcel出力をするGemである**caxlsx_rails**を利

元記事を表示

Deviseを利用した会員機能の実装手順

初めまして、これから自分が学習した内容をまとめていこうと思い、投稿を始めました。
まず最初は、Deviseを利用した会員機能の実装です。

# 1.deviseをインストールする
Gemfileに`devise`を追加し、インストールします。
“`:Gemfile
gem ‘devise’
“`
次に以下のコマンドで `bundle install`を実行します。
“`ruby:bash
bundle install
“`
# 2.deviseのセットアップ
`devise`をrailsアプリにセットアップします。
“`:bash
rails g devise:install
“`
*g はgenerateのg です。
このコマンドは、deviseの設定ファイルを作成し、初期設定を行います。
# 3.Flashメッセージの設定
`devise`では、フラッシュメッセージがログインやサインアップの成功/失敗時に表示されます。以下をの記述をapplication.html.erbに追加します。
“`erb:app/views/layout/application.html.e

元記事を表示

RailsでHotwire(websocket)使ったら、HerokuのRedisで接続エラーになった

## 起こったこと
RailsアプリでHotwireのWebSocketを導入時に、Redisが必要になった。
HerokuそれをHerokuにデプロイしたら、Redisを使う場面で以下のエラーになった。

“`
redis::CannotConnectError (SSL_connect returned=1 errno=0 peeraddr=34.232.151.103:20700 state=error: certificate verify failed (self-signed certificate in certificate chain) (rediss://ec2-XXXXXXXXXX.amazonaws.com:000000)):
“`

Herokuの[公式ドキュメント](https://devcenter.heroku.com/ja/articles/connecting-heroku-redis#connecting-in-rails)にある、RailsでRedisに接続するためのコードは実装していた。

“`rb:config/initializers

元記事を表示

Railsバージョンアップで `URI.encode` と `URI.escape` が使えなくなった問題とその解決策

Railsアプリをバージョンアップした際に、`URI.encode` や `URI.escape` が非推奨・廃止されるため、エンコードの方法を変更する必要が出てきます。この問題とその解決策について、コード例を交えて解説します。

## 問題の発生

Railsをバージョンアップした後、次のようなコードで問題が発生することがあります。

“`ruby
address = “#{params[:address_line1]}#{params[:city]}#{params[:address_line2]}”
target_uri = URI.escape(“https://api.example.com/location?address=#{address}&key=#{API_KEY}”)
“`

このコードは `URI.escape` の廃止によりエラーが発生します。

## 解決策: `URI.encode_www_form_component` を使用

すべてのURLをエンコードするのではなく、パラメータ部分のみをエンコードします。

### 変更

元記事を表示

Railsのバージョンアップで `add_template_helper(ApplicationHelper)` エラー発生! `helper ApplicationHelper` に変更する理由と対処法

Railsアプリをバージョンアップした際に、`add_template_helper(ApplicationHelper)` を使用しているとエラーが発生することがあります。このエラーを解消するために、 `helper ApplicationHelper` へ変更する方法について解説します。

## エラーの概要

Railsのバージョンをアップデートした後、コントローラやビューでヘルパーを使おうとしたときに、以下のようなエラーが発生する場合があります。

“`
NoMethodError: undefined method `add_template_helper’ for ApplicationController:Class
“`

このエラーは、Railsのバージョン変更に伴い、`add_template_helper` の使用方法が非推奨、または変更されたことが原因です。特に、`ApplicationHelper` をコントローラで使いたいときにこのエラーが見られます。

## 解決策: `helper ApplicationHelper` を使う

元記事を表示

【Rails】フォロー/フォロワー機能の実装※見返し用

:::note info
フォロー・フォロワー機能を初心者向け(自分用)にまとめたもの
:::

# 1. フォロー・フォロワー機能の基本的な仕組み

フォロー機能は、ユーザー同士が相互に関係を持つ「多対多」の関係を管理します。これを実現するために、「中間テーブル」を使います。

・ユーザーは他のユーザーをフォローできる。
・フォロワーは自分をフォローしているユーザーのこと。

この関係をRailsで実現するために、次の3つを作成します:

・Userモデル: ユーザーの情報を管理します。
・Relationshipモデル: フォロー・フォロワーの関係を管理する中間テーブルです。
・コントローラー: フォロー・フォロワーの操作を実行するためのアクションを定義します。

# 2. データベース設計

まず、relationshipsテーブルを作成して、フォローとフォロワーを管理します。

“`bush
‘rails g migration CreateRelationships follower_id:integer followed_id:integer’
“`
マイグレーション

元記事を表示

rspecの中で呼ばれているクラスの定数の値を任意の値にする方法

# 環境

– rails6.0系
– rspec3系

# 初めに

※サンプルコードになります

travel_toメソッドで時刻を変更した中で実施したテストがありました。
その中で、定数の内部で現在時刻から30日前を取得する処理があったのですが、travel_toの影響を受けず、テスト実行時の時刻を元に取得している問題が発生しました。
“`rb
before { travel_to(‘2023-06-20 18:00:00’) }
“`

“`rb
class User
TEST_DATE = Time.current.ago(30.days).strftime(‘%Y-%m-%d’) # テストの中で呼ぶとtravel_toの影響を受けず実行時の現在時刻から算出された
end
“`

# 解決策

テスト実行前に、呼び出している定数を`stub_const`で書き換えてあげると上手くいきます
“`rb
stub_const(‘User::TEST_DATE’, Time.current.ago(30.days).strftime(‘%Y-%m-%d’))
expe

元記事を表示

【Rails】ルーティングの”collection”と”member”の違い

こんにちは!
初Railsの記事です:thumbsup_tone1:

今回は、ルーティングの member と collection の違いについて書きます!

![banner.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524120/83de7afc-66c8-8880-ad67-fd6231afad24.png)

# 違い
* member を使った場合は id が付与される
* collection を使った場合は id が付与されない

# 前提
例として UsersController があり、hoge というメソッドを実行します。

# member
“`
resources :users do
member do
get ‘hoge’
end
end
“`
上記のように member を使用すると以下のルーティングが設定されます。
“`
/users/:id/hoge
“`

# collection
“`
resources :users do

元記事を表示

【個人開発】Railsで経営・起業につかえるフレームワーク分析アプリを作成!

この度、実は前から考えていた、フレームワークアプリを作りました!
以前、↓Nolaというサービスを見かけたときに、小説→経営や起業に置き換えたエディターツールって便利なのでは?と思ったのがきっかけです。

https://nola-novel.com/

## アプリ紹介
そこで今回、経営・起業フレームワーク分析ができるアプリ、Compassbookを作成しました。
PEST分析、3C分析、STP分析、4P分析、ビジネスモデルキャンバスの記入が可能です。

サイトはこちら
URL:https://compassbook.onrender.com/

閲覧用アカウント
ID:test@test.co.jp
Pass:111111

※自由に書き込みや登録いただいて大丈夫です。その際はご自身でアカウントを作成ください。
※ポートフォリオの役割があるため、場合によっては投稿を削除する可能性がございます。予めご了承ください。

Githubはこちら
https://github.com/yusukesugahara/compassbook

## サービス概要
経営や起業のためのフレームワー

元記事を表示

railsのcookieのメソッド

# railsに使うメソッド
### cookieの暗号化
>Sets an encrypted cookie value before sending it to the client which
>prevent users from reading and tampering with its value.
>It can be read using the encrypted method `cookies.encrypted[:name]`
“`
cookies.encrypted[:discount] = 45
“`
https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html#:~:text=%23%20Sets%20an%20encrypted%20cookie%20value%20before%20sending%20it%20to%20the%20client%20which%0A%23%20prevent%20users%20from%20reading%20and%20tampering%20

元記事を表示

devise-jwtを使って別ユーザでログインしたら、前ユーザとしてログインされてしまう件

# はじめに
みなさん、こんにちは **torihazi**です

今日はdevise-jwtを使用してログイン機能を実装していたところ
予想と異なる挙動を示したのでその調査をしていきたいと思います

ではltg

※ ~~結論、原因は究明できていません。~~
~~結局frontendにおいて応急処置のような処理を追記し、実現しました。~~
原因はbackendではなくfrontendでした。

# バージョン
“`
Rails 7.0.6
Ruby 3.2.1
devise
devise-jwt
“`

# どういう挙動なのか
例えば userAとしてフロントエンドからログインをしたあと、
別タブから開いたログインページにおいてuserBとしてログインを行ったら
userAとしてログインされてしまっている状況です。

ログインに成功したらそのレスポンスヘッダのAuthorizationの値をcookieに保存し、
以降の認証が必要な処理はリクエスト時に適宜保存したtokenを添えて送る感じです。

# 原因究明

https://techracho.bpsinc.jp/hach

元記事を表示

【ポートフォリオに生かせる!】Next.14とRailsAPIで作るカレンダーアプリ

# アプリデモ

https://x.com/Nao8epicmotion/status/1841009401051906192

## ソースコード

https://github.com/Kroro1208/calendar-rails-nextjs

## 学習技術

1. Full Calendar,shadcn-ui, tailwind使用したUIの構築
2. Redis使用したRails7/Next.js14 認証フローとセッション管理方法
3. TanstackQueryを使用したデータフェッチ方法
4. react-hook-formを使用したフォーム管理
5. Dockerを使用した環境構築
6. MySQLを使用したDB操作
7. Redisを使ったセッション管理

## Redis使用したRails/NextJS 認証フローの簡単な図解
![スクリーンショット 2024-09-25 222809.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492127/d8b69aa4-b2

元記事を表示

オリジナルアプリ制作過程 〜wants〜

### 本日の進捗報告: Wantsアプリのリクエスト機能実装

#### 1. ルーティングの設定

まず、`config/routes.rb` を更新しました。リクエストに関連するルートを設定し、`requests#index` をアプリのルートパスに設定しました。

“`ruby
Rails.application.routes.draw do
resources :requests, only: [:index, :new, :create]
devise_for :users
root to: “requests#index”
end
“`

#### 2. リクエストコントローラーの実装

次に、リクエスト一覧と新規リクエスト投稿機能を `app/controllers/requests_controller.rb` で実装しました。リクエストの一覧表示、リクエスト作成フォームの表示、リクエストの作成処理を定義しました。

“`ruby
class RequestsController < ApplicationController def inde

元記事を表示

RailsでJavaScriptファイルを新しく作ったら動かない

新人エンジニアの私が、入って1ヶ月ほどの時にハマった落とし穴。

### 「RailsでJavaScriptファイルを新しく作ったけど動かない。うまく繋げられない。」

一人で解決するのに相当な時間をかけてしまいましたので、同じ状況で困っている方のお力になれれば幸いです。

## 状況

Ruby on Railsで、JavaScriptファイル `sample.js` を新しく作りました。

“`sample.js
class Sample {}
“`

この `sample.js` に書いたクラスを、`html.erb` で呼び出します。

“`html.erb

“`

しかし、、、ページを読み込むとコンソールに以下のエラーが出てしまいました。

“`
Uncaught ReferenceError: Sample is not defined
“`

ReferenceError、、、Sampleなんてのは見つからないと、、、
完全にJa

元記事を表示

【Rails】ArgumentError: The scope body needs to be callable.

## はじめに
Railsのアップデート中にscopeを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
コード
“`ruby
scope :valid, where(:is_valid => true)
“`

エラー文
“`ruby
ArgumentError: The scope body needs to be callable.
“`

## 解決方法
以下のように修正します。
“`ruby
scope :valid, -> { where(:is_valid => true) }
“`

## 参考
https://stackoverflow.com/questions/28951671/argument-error-the-scope-body-needs-to-be-callable

元記事を表示

OTHERカテゴリの最新記事