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

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

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

元記事を表示

Ruby on Rails 環境構築 MacOS

MacOSでのRuby on Railsの環境構築(installまわりのみ)を記録用に残しておきたいと思います。
ChatGPTに聞けば一発でわかることかもしれませんが、誰かの経験を参考にしたいという方の手助けになれば幸いです。

至らない部分もある方と思いますが、その時はそっと教えていただけると励みになります!

Rubyのインストール

* まずはbrew入ってるのかなあと、確認
“`
brew -v
“`
>version表示されたらOK

* rbenvのインストール

“`
brew install rbenv ruby-build
“`
* インストールされたか確認

“`
rbenv -v
“`
>version表示されたらOK

+ rubyのインストール
“`
rbenv install 3.2.0 //任意のversion
“`
+ インストールされたか確認
“`
ruby -v
“`
>version表示されたらOK

2, bundlerのインストール

bundlerはRubyライブラリーの依存関係やversionを一元

元記事を表示

Rails+M1 Mac+Docker環境にSystem Specを導入する

[Rails アプリに E2E テストを導入する(技術選定編)](https://qiita.com/bython/items/4d79ade2e8da5378e8b6)で E2E テストをする上での選択肢や各スタックについて理解しましたが、
今回は実際に E2E テストを実行する環境を構築して、簡単なテストの実行まで行いたいと思います。

## 環境

– OS: Ventura 13.5(22G74)
– CPU: Apple M1
– Ruby: 3.2.2
– Rails: 7.0.8
– Docker Desktop: 4.21.1

## Gem のインストール

Gemfile に必要な gem を追加します。webrdrivers が存在すると、Webdrivers::BrowserNotFound のエラーが発生するため削除します。

“`ruby:Gemfile
group :test do
gem ‘capybara’, ‘>= 2.15’
gem ‘selenium-webdriver’
# gem ‘webdrivers’ ← これは削除する
e

元記事を表示

StimulusのRouter class、Dispatcher classのプロパティ

# はじめに

以下の記事で、Stimulus アプリケーションの起動時にしていることをまとめました。

https://qiita.com/yasu-sg/items/38f7b3529d0096d68d14

起動時に、`Router` class、`Dispatcher` classのインスタンスを作成して、それぞれのインスタンスで`start`メソッドを実行していることがわかりました。
しかし、それぞれのインスタンスの役割が何であって、なんのために`start`メソッドを実行しているのいまいちわかりませんでした。
調べた限り、それぞれの役割について書かれている記事は見当たりませんでした。
全てのコードを一気に読んで役割を推察するのは難しいです。
なので、少しずつコードを読み解いて、役割を理解していくことにします。
本記事では、それぞれのclassのプロパティを読み解きます。

# `Router` classのプロパティ

以下は、`Router` classのプロパティです。

“`ts
readonly application: Application
private m

元記事を表示

Railsの特殊なところ

# はじめに


Railsを学んでい

元記事を表示

【個人開発】北海道の魅力を発見し、北海道旅行のお悩みを解決するアプリを作りました🐄

# はじめに
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
完全異業種からエンジニアに転職するためオンラインスクールに入り学習をしていました。

オンラインスクールでは北海道から受講している方がほとんどおらず、
道外の方と交流する中で、

道外の方は意外と北海道について知らないことが多いのかも🤔
道民が近くにいなくても、代わりに相談に乗ってくれるようなアプリを作りたい💭
もっと北海道を身近に感じてもらいたい🦌
と思ったことがきっかけで、このアプリを作成しました。
  
**「えぞとらべる」**

https://ezo-travel.com/

https://github.com/satou-haruka-37/hokkaido_travel

# 使い方
### 1.北海道内のおすすめのスポットを探す機能
道外の方からの **「広すぎてどこに何があるかわからない」** というお悩みに対して、
投稿を地図上にマーカーで表示することで、どこにあるスポットなのか分かりやすくしました。
田舎のスポットも、有

元記事を表示

【Ruby on Rails】rubocopの警告「Rails/InverseOf」から学ぶinverse_ofオプション

私は現在、未経験からのエンジニア転職に向けてプログラミングスクールで学習をしている、いしかわと申します。

個人開発中に`rubocop`から`Rails/InverseOf`と警告されたことをきっかけに`Active Record`の`inverse_ofオプション`を用いた`双方向関連付け`について学習した内容をアウトプットとしてこちらの記事にしました。
どなたかの参考になれば幸いです。

:::note warn
プログラミング初学者なので、内容に誤り等ある可能性があります
誤りがありましたら教えてくださると幸いです
:::

環境
ruby 3.2.2
Ruby on Rails 7.0.8

# 双方向関連付けとは
皆さんが良く知る以下のアソシエーション関連付けは`双方向関連付け`と呼ぶことができます
※まずこれすら知らずにアソシエーションだなんだかんだと言っていた私に石を投げてください
“`ruby
class User < ApplicationRecord has_many :books end class Book < ApplicationRecord

元記事を表示

オーバライドとモンキーパッチでどう違うねんと思ったので調べた

オーバーライド(Override)とモンキーパッチ(Monkey Patch)は、どちらも既存のコードの挙動を変更する方法ですか、
使用される文脈と目的において全く違う振る舞いをするよと教えてもらったのでまとめてみました。

### オーバーライド

オーバーライドは、主に継承で使用され、
サブクラスがスーパークラスで定義されたメソッドを再定義することを指します。

#### 具体例
“`ruby
class Animal
def speak
“Some sound”
end
end

class Dog < Animal def speak "Bark" end end dog = Dog.new puts dog.speak # 出力: "Bark" ``` この例では、`Dog`クラスが`Animal`クラスの`speak`メソッドをオーバーライドしています。 ### モンキーパッチ モンキーパッチは、既存のクラスやモジュールに新しいメソッドを追加したり、既存のメソッドを変更したりするために使われます。モンキーパッチは、継承とは関係なく

元記事を表示

OTHERカテゴリの最新記事