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

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

dockerコンテナ内でrails dbconsoleが使えないエラーが出た時の対処法

**概要**
—————————————

DBコンソールを起動しようとDockerコンテナ内で以下コマンドを実行したが,エラーが発生。

“`
# rails db
Couldn’t find database client: psql. Check your $PATH and try again.
“`

rails dbコマンドを実行したときにPostgreSQLのクライアントであるpsqlが見つからないときに表示されるとのこと。
Dockerfileを訂正し,PostgreSQLをインストールする必要がある。

**解決策**
——————————————–
Dockerfile
“`rb
FROM ruby:3.1.4
RUN curl -sL https://deb.nodesource.com/setup_19.x | bash – \
&& wget –quiet -O – /tmp/pubkey.gpg https://dl.yarnpkg.

元記事を表示

【Rails】destroyではなくshowが実行される

# はじめに
この記事では、学習中に出会ったエラーとその解決までの道のりを自分のために記録しています。
初学者のため理解が不十分なところがあるかもしれません。
その場合はご指摘いただけると幸いです。

# 起こった問題
スクールのカリキュラムでX(旧Twitter)のような短文投稿サイトを作成した際、destroyアクションを実装して投稿の削除ボタンを作成したが、showアクションが実行されてしまった

# 結論
RubyのコードではなくJavaScriptの問題の可能性があるためコンソールを確認してみる

# 試したこと①
元の記述(これだとdestroyできない)
“`
<%= link_to "削除", user, method: :delete, data: { confirm: "本当に削除しますか?" } %>
“`
この記述で作成した削除リンクをクリックするとshowアクションに飛んでしまいました。
特にエラーが表示されるわけでもありません。
調べたところ、link_toをbutton_toに変更すると解決する場合があるとのことだったので試してみました。
“`
<

元記事を表示

【Rails】buildメソッド結構有能かもしれない

どうもこんにちは。

今回はRailsで使いこなすと楽そうな`build`メソッドについて調べました。

# buildメソッドとは?

`build`メソッドは`new`メソッドにかなり似たメソッドです。
ただし、場合によって、`new`メソッドを使用するより`build`メソッドを使用することでコードの簡略化ができます。

# newメソッドとの違い

## newメソッド

– Active Recordモデルの新しいインスタンスを作成する
– モデルクラス自体に対して直接呼び出される

“`ruby
new_post = Post.new
“`

– 関連付けを意識せずに単独でオブジェクトを作成する場合に使用される

## buildメソッド

– `has_many`、`has_one`、`belongs_to`などの関連付けが定義されている場合に使用される
– 関連付けられたオブジェクトの新しいインスタンスを作成し、そのインスタンスを親オブジェクトに自動的に紐付ける
– 関連付けを表すメソッドチェーンの一部として使用される

“`ruby
user = User.fi

元記事を表示

Rails の `render`の注意【Turbo】

# はじめに
「何をすればいいのか」はわかるけど、「なぜなのか」まではわかりませんでした・・・悔しい。

# 問題
ログイン処理のコードです。
“`rb
class UserSessionsController < ApplicationController   def new; end   def create     @user = login(params[:email], params[:password])     if @user       redirect_back_or_to(root_path, notice: I18n.t('flash.user_sessions.new'))     else       flash.now[:alert] = I18n.t('flash.user_sessions.new_failed')       render :new, status: :unprocessable_entity     end   end   def destroy     logout     redirect_to(root_path, no

元記事を表示

ActiveStroage + S3 でファイルを扱う

### はじめに

S3使用時のActiveStorageについて、シンプルな構成で動作の流れと実装方法をまとめました。今回はRailsとDBはHerokuにデプロイしています。

### 全体概要

ファイルアップロード時の流れは下記になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895236/a6931067-be9d-b47f-c9f8-cf3b4e24791a.png)

1. クライアントからRailsにファイルを送信(POST)します
1. ActiveStorageがS3にファイルをPutします
1. ActiveStorageがDBにメタ情報を保存します

### 動作確認環境

– Apple M1
– macOS 14.1.2
– Ruby 3.2.1
– Rails 7.0.6
– gem aws-sdk-s3 1.142.0

## 環境構築

構築時の手順は下記のような流れになります。

1. AWS
1. ファイルを保存するS3のバ

元記事を表示

RDS Blue/Greenデプロイした後のmigrationファイルはどうするべきか?

RDSのBlue/Green Deploymentsは本当に便利な機能ですね。昔はレプリカのサーバーを0から構築していたことを考えると隔世の感があります。

さて、この機能を使ってDBのスキーマを変更した時に問題となるのが、アプリケーションフレームワークにmigration管理の仕組みがあった場合に、DBのスキーマとmigrationの結果に乖離が生じるというものです。要するにmigrationを使わずに直接DBのスキーマを変更したのと同様の状態になってしまうということですね。

これの対応をすることがあったので参考になればと思います。フレームワークはRuby on Railsです。

## migrationを改ざんして辻褄を合わせる

### 空のmigrationを作成する

“`shell
$ bundle exec rails g migration ChangeTableItTakesVeryLongTime
invoke active_record
create db/migrate/20240204115013_change_table

元記事を表示

【Rails】カラムのデータ型、booleanとは?

今日勉強していて初めて扱うカラムのデータ型があったので紹介します!

## booleanとは??
 **true/falseのいずれかを扱う**ことを想定して設定するカラムです。
例えばDM機能においてメッセージを既読か未読に分けたいとき、
既読=true、未読=falseと扱うとデータの管理がしやすくなります。

しかし、マイグレーションファイルに何も制約(あとで説明します)をつけないと、
nilというカラムの値も存在してしまいます。

### 制約とは?

#### NOT NULL制約

モデルを作った時点では、値として`true`、`false`、`nil`の3つが存在してしまい、
nil=??という状態ができてしまうため、booleanを扱うカラムは、
基本的に`null: false`という記述をセットでしましょう。
この記述を**NOT NULL制約**と言います。

#### DEFAULT制約
 また、booleanではもう一つ重要な設定が必要です。それはdefaultがtrueかfalseかという記述です。
この記述がないと、初期の状

元記事を表示

Railsにおけるリクエストからレスポンスまでの流れについて(GET編・POST編)

## はじめに
Railsの処理の流れの基本が理解できてなかったので、
シーケンス図を作ってフローを解説してみました。

## GET編
とあるSNSアプリがあります。ユーザーの一覧ページがブラウザに表示されるまでの流れを説明してください。なお、以下の言葉を使うことを条件とします。

/users (← URLです)
GET
コントローラ
routes.rb
モデル
ビュー
データベース

1\. クライアントは、ブラウザで/usersというURLにアクセスする
2\. HTTPメソッドのGETでサーバへリクエストを送る
3\. それを受け取ったサーバはroutes.rbファイルに定義されているルーティングに基づき、それに対応するコントローラとアクションを特定し、呼び出す

“`ruby:config/routes.rb
get ‘/users’, to: ‘users#index’
“`
この場合、/usersへのGETリクエストはUsersControllerへ、そしてその中で定義されているindexアクションを呼び出す

4\. アクションは必要なデータを処理し、Userモデ

元記事を表示

【Ruby・Rails】nil? ・empty? ・blank? ・present?の使い方

## はじめに
使い分けがフワッとしていたので改めてまとめます。
## メソッドごとの違い

| メソッド |判定対象| 出力 |
| — | ———– | ——- |
| nil?| nil |Boolean|
| empty?|””(空文字)|Boolean|
| blank?| nil + “”(空文字) + [] + {} |Boolean|
| present?|nil + “”(空文字)以外か|Boolean|

https://railsdoc.com/page/empty

## nil?

“`ruby
hoge = nil
puts hoge.nil?
# true
hoge = “”
puts hoge.nil?
# false
“`

## empty?
“`ruby
hoge = “”
puts hoge.empty?
# true

hoge = “hoge”
puts hoge.empty?
# false

hoge = nil
puts hoge.empty?
#undefined method `empty?’

元記事を表示

gem `Sorcery` +αメモず 【Rails】

# はじめに

メモ群なので、気になった見出しをご覧ください!
# メモず
## sorceryの言語(?)思想
[Sorcery](https://github.com/Sorcery/sorcery)の思想のうち、特にお気に入りのポイント
– Less is more:少ないほど良い
– Simple & short configuration as possible:可能な限りシンプルで短い
– Keep MVC cleanly separated – DB is for models, sessions are for controllers. Models stay unaware of sessions:MVCを混ぜない。分離させたまま
### Configuration over Confusion
ぱっと見、Railsの言語思想「CoC」に見えるが、
Railsは「Convention over Configuration(設定より慣例)」
Sorceryは「Configuration over Confusion(混乱より設定)」
と、Railsをもじった別物。
糖衣

元記事を表示

【Rails】アソシエーションを理解するための基礎知識①

こんにちは!
今回はフォロー、フォロワー機能を作っているときに初心者がそもそもこの用語どういう意味だっけ?となってしまう部分や、この機能ってなんで必要なんだろうと思う部分をまとめてみました!
フォロー、フォロワー機能以外にもアソシエーションはいろんなところで使うので是非参考にしてください:ok_hand_tone1:

## FK(Foreign_key)とPK(Primary_key)とは
()の中に書いてあるのはヒントです!というか答えです。でも初心者は省略された瞬間分からなくなりますよね:innocent:でもとても重要なのでここで覚えてしまいましょう!!
順番は逆になってしまいますが、まずPK(Primary key)とは何か説明します。

#### PK(primary key)とは
**PK**は親のidとよく表現されますが、すなわち、各モデルで割り振られるid部分に相当します。
ユーザーだと下のテーブルのidの部分にあたります。
よく言われるユーザーidのことですね。ユーザー以外でもほとんどのモデルにPKは必要です。投稿機能を実装するなら投稿自体のid、コメントならコメン

元記事を表示

Railsガイド +αメモず【DSL】

# はじめに
[Railsガイド](https://railsguides.jp/active_record_migrations.html)でわからなかった語句シリーズです。
「マイグレーションではRubyのDSLが使われているので・・・」
DSL?何?
# DSLとは

> DSL(Domain-Specific Language)は、特定のアプリケーションドメインに特化したプログラミング言語です。これらの言語は、一般的なプログラミング言語とは異なり、特定の種類の問題やタスクを扱うために設計されています。DSLの目的は、特定のドメインにおいて、より効率的かつ直感的にプログラミングすることを可能にすることです。
>
> DSLには大きく分けて2種類あります:
>
> 1. **内部DSL(Internal DSLs)**:これは既存のプログラミング言語に基づいて構築され、その言語の構文と機能を活用します。例えば、RubyやPythonで書かれたDSLがこれに該当します。
>
> 2. **外部DSL(External DSLs)**:これらは独自の構文を持ち、特定の

元記事を表示

【Rails】アプリケーションを作成したときに抜けがちな作業(初心者編)

こんにちは。
今回は初心者が忘れがちでも、当たり前すぎて記事にあまり載っていない作業を載せていきます!

## プラグイン導入
“`terminal:
$ yarn add @babel/plugin-proposal-private-methods @babel/plugin-proposal-private-property-in-object
“`
これをしないとRailsアプリケーションが動作しません。アプリケーション作成後忘れないうちに!
(私は忘れてしまってdelete機能をきちんとメソッド指定しているのにPOSTで処理されてしまっていることがありました。)

## ホストの許可
“`ruby: config/environment/development.rb
config.hosts.clear
end
“`
スクロールして一番下に元々あったconfig.hostsの記述がありますが、それを消して書き換えましょう。
これを忘れてしまうとBlock host:∼以下略というエラーが発生します。

## $ rails db:migrate
“`termin

元記事を表示

初めての投稿

# 自己紹介
初めまして。DMMWEBCAMP2024年1月生(2024年2月時点で在学中)23歳女です。
もともと医療関係のお仕事をしていましたが、現在は退職し未経験でのエンジニア転職に向けて日々勉強中です!
プログラミング**完全未経験の超初心者**ですが、学ぶにつれて自分の学んだことをアウトプットする場が欲しいと思い、Qiitaで成長ブログのようなものをこれから書いていこうと思います。
ちなみに言語のアウトプットの練習にもなるため、面接にも役立ちそうというのも狙いです。

初回記事の内容は、**超初心者が何でこのコードを書いているか忘れがちなポイント第一弾**です!
(第何弾やれば終わるか分からない笑)
ではさっそく書いていきます。

## before_action :authenticate_user!, except: [:アクション名]
 `authenticate_user!`が初心者には見慣れないですね。
これはコントローラの記述を書く際に、2行目以降必要となってくる記述です。
意味としては、『アクションを始める前に**ログインしていないユーザー**は、ログイン

元記事を表示

Rails知っておきたい用語【初級】

Railsの基礎学習の中で覚えておきたいまたはよくわからなかった用語を調べてまとめてみました。これから学習が進み次第追記していこうと思います。

# Webサーバソフトウェア

Webサーバソフトウェアは、ブラウザとアプリケーションサーバの間に立ち、ブラウザからのリクエストをアプリケーションサーバにリクエストし、アプリケーションサーバからのレスポンス(HTML、CSS、JavaScriptなど)をブラウザへ返す役割を持つ。静的ファイルの場合は、そのままブラウザへレスポンスを返す。

## アプリケーションサーバソフトウェア

アプリケーションサーバソフトウェアは、ブラウザやWebサーバと通信し、動的なコンテンツを生成して送信する。また、リクエストによって、データベースサーバーにアクセスしデータの抽出や加工処理を行う。ローカル環境の場合、Webサーバを持たずアプリケーションサーバとブラウザが直接やりとりすることもある。

## データベースサーバソフトウェア

データベースサーバソフトウェアはデータの記録、読み書きを行う。MySQLやPostgreSQLなどのソフトウェアを使用してデ

元記事を表示

【Rails】namespaceで管理者と利用者ごとにcontrollerとviewをわけて処理を変える。

## はじめに
タイトルの通り、namespaceを使って管理者(admin)と利用者(user)でコントローラーとビューをわけたいと思います。
利用者に公開する画面と管理者に公開する画面は別々で、管理者だけがアクセスできる処理を作成するなどよくあることだと思います。
なのでこのような記事は調べれば沢山でてきますが、勉強のためアウトプットを兼ねて投稿したいと思います。
説明を省略する箇所が多いかもしれませんので、深く理解したいかたは他の記事をみることをおすすめします。

## namespaceとは
namespaceは名前空間とも呼ばれており、簡単に言うとコントローラーやモデル、ビュー、ルーティングなどをグループ化するために使用される仕組み。

## namespaceの使い方
商品一覧を表示するurl`/items`があるとします。
### ルーティング
~~~ruby
Rails.application.routes.draw do
resources :items
end
~~~
通常だとこのようなルーティングを設定することが多いと思いますが、この状態だと管理者(admin

元記事を表示

[Rails] pgをインストールできずrails newでアプリを新規作成できない

## 環境

– MacBookAir 13インチ M1(2020)
OS:Sonoma 14.3
メモリ:8GB
– Rails: version 6.1.7.6

## やりたいこと

rails newコマンドで新しくアプリケーションを作成する。

“`bash
$ rails _6.1.7.6_ new sample -d postgresql
“`

## エラー内容

上記のコードを実行すると下記のようにエラーが発生。

“`bash:エラー内容
An error occurred while installing pg (1.5.4), and Bundler cannot
continue.
Make sure that `gem install pg -v ‘1.5.4’ –source ‘https://rubygems.org/’`
succeeds before bundling.

In Gemfile:
pg
run bundle binstubs bundler
Could not find gem ‘pg (~> 1.1)

元記事を表示

【Rails】標準ライブラリ「objspace」って何者?

どうもこんにちは。

今回はアプリケーションのソースコード理解を進めている中で知らないライブラリがあったので調べてみました。

# 標準ライブラリって何?

標準ライブラリとは、Gemfileを通じてインストールする必要がないRubyにすでにインストールされているライブラリのことを指します。

わかりやすいものでは、`CSV`ライブラリがRubyの標準ライブラリとして使用されます。これは、使用したいコントローラーやモデルのファイルの中で`require`するだけです。

“`ruby
# これを記述すると
require ‘csv’

class Sample
def format_export
respond_to do |format|
format.csv do
bom = “\uFEFF”
# CSVクラスを使用してコードを書くことができます。
csv_data = CSV.generate(bom) do |csv|

元記事を表示

railsで作成したアプリに投稿日時を表示させる方法

# 投稿日時を表示させるには

以下の記述をすることで投稿日時を表示できる。
“`ruby:〇〇.html.erb
<%= テーブル名.created_at %>
“`

ただし、この記述だと日本時間で表示されない(おそらくアメリカの時間が表示されている) ため為日本時間への変更が必要になる。

# 日本時間を表示させる

## 手順1
日本時間を表示させるには aplication.rb を以下のように編集する。
“`ruby:aplication.rb
module TaskMemo
class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 7.0 config.i18n.default_locale = :ja config.time_zone = 'Tokyo' # 省略 end end ``` ```

元記事を表示

dockerとdocker-composeを使って既存プロジェクトをdocker化した

## はじめに
dockerとdocker-composeを使って既存のRails+PostgreSQLのプロジェクトをdocker化したので、備忘録として手順をまとめます。

## 作業環境
– M1Mac メモリ8GB

## Dockerfileを用意する
Dockerコンテナを起動するためにはDockerImageの作成が必要になります。
DockerImageを作るために、Dockerfileを用意します。

:::note info
ちなみに。
Dockerコンテナ:オブジェクト指向的に言えばインスタンス
DockerImage:Dockerコンテナの元となるもの(オブジェクト指向的に言えばクラス)
Dockerfile:DockerImageの設計書のようなもの
:::

Rails用の Dockerfileを下記の通り用意しました。

“`dockerfile:Dockerfile
FROM ruby:3.2.2
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add –
RUN ec

元記事を表示

OTHERカテゴリの最新記事