Rails関連のことを調べてみた2022年03月26日

Rails関連のことを調べてみた2022年03月26日

rails_tutorial chapter8 <忘備録>ログインとログアウト

# ルーティングの一覧
| 1 | 2 | 3 | 4 | 5 |
|:-:|:-:|:-:|:-:|:-:|
| HTTPリクエスト | URL| 名前付きルート| アクション名| 用途 |
| GET | /login | login_path | new | 新しいセッションのページ(ログイン) |
| POST | /login |login_path | create | 新しいセッションの作成(ログイン) |
| DELETE |/logout | logout_path | destroy | セッションの削除(ログアウト) |

ユーザー登録フォームでform_withヘルパーを使い、ユーザーのインスタンス変数@userを引数にとっていました。
すると、railsが勝手に「フォームのactionは/usersというURLへのPOSTである」と解釈をして、createまで実行してくれました。

“`
<%= form_with(model: @user, local: true) do |f| %>
.
.
.
<% end %>
“`

元記事を表示

Railsで作成したアプリをGitHubで管理する方法

# 結論    

アプリを保管するための倉庫を`自分のパソコン`(local repository)と`GitHub`(remote repository)上に作成して、`送り込む`(push)。

### ちなみに

remote: 遠隔
local: 地元
repository: 倉庫、保管庫

## 1.リモートリポジトリを作成

“`
GitHubで新規リポジトリを作成する。
“`

## 2.ローカルリポジトリを作成し、送り込むための準備

“`ターミナル
$ git init        #remote ripositoryが作成されるだけ

$ git add .   

# 編集中のコードをGitで管理対象にするという意味のコマンド   
# ‘index’にステージングともいう

$ git commmit -m ”どんな機能を実装したのか等のコメントを残す”

#local repositoryにプログラムを保存するコマンド
#これでremote repositoryに送り込む準備は整った
“`
### ちなみに
initialize

元記事を表示

Rails MVCモデルとは何か

# 結論

アプリケーション設定を整理するための概念。

この概念に基づいてアプリ制作を行うことで、**開発がしやすくなったり**、**保守性が高くなったり**します。

Q:開発がしやすい?

A:プログラムを書き込む場所がルール化されているので作業が早くなる。

例えば`夕飯を用意してください。`と指示されるよりも`カレーを作ってください、ただし人参は抜きなさい`とルールが決められている方が動きやすいのです。

Q:保守性が高い?

A:メンテナンスのしやすさのこと

つまり、こういう考え方で作ると安全で壊れにくいアプリケーション作りやすいよってことです。

# ちなみに

Model View Controller の頭文字です。
それぞれ役割が分かれていて、どこに何のプログラムを書くか決まっています。

M: 模型、型

V: 光景、眺め

C: 支配者、制御装置

## Modelの役割

データベース操作に関わる処理を作る

商品情報や、顧客情報のデータを扱うデータベース(db)のデータ操作をするためのプログラムを作る。

例:個人情報に関するデータや自己紹介メソ

元記事を表示

rails 詳しいフォロー機能の仕組み

## 初めに

今回この記事では、フォロー機能について詳しく解説していきたいと思います。
他の人の記事を読んでも仮想モデルってなんだよ、、、
さっぱりわからんわと感じた人にぜひ読んでいただきたいです。
フォローの記述の設定はこの記事で行いますが、フォロー一覧ページの作成やフォローボタンの作成は行わないので実装だけしたい人は下記で載せさせていただいておりますサイトを参照していただけますと幸いです。

## 前提の状態
– テーブル構成(schemaファイル)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1717562/f12a9ea4-8f74-24d1-8f3f-fbb885a65605.png)

– 備考
– userテーブルは、deviseを使用。
– 基本的にconsoleからデータを入れてみています。

– 参考になるフォローの記事
[こちら](https://note.com/memomemotarou/n/n673f99a79ffe)の記事では、解説

元記事を表示

【Laravel】get() / first() / find()の返り値の違い

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況

deleteする際エラーが発生。

“`
Method delete does not exist.
“`

“`php
public function destory($id)
{
$article = Article::where(‘id’, $id)->get();
$article->delete();

return redirect()->route(‘home’);
}
“`

## 原因
“`Article::where(‘id’, $id)->get();“`の返り値が**Collectionクラス**だから。
Collectionクラスに対してdeleteできないというエラーだった。

(Collectionクラスは、RailsでいうEnumerableモジュールだと思う)

https://docs.ruby-lang.org/ja/latest/class/Enumerable.html

“`php
>>> Article::where(‘id’, 9)->

元記事を表示

Railsアプリでデータベースを作成する方法

# 結論
ターミナルで以下を入力する
“`
$ rails db:create
“`
これでデータベースを作成できます。

## 成功した場合
“`
Created database ‘db/development.~~~~’
Created database ‘db/test.~~~’
“`
`データベースが作成された`と表示されます。

## ちなみに 
rails db:create を2回以上打ち込むと
“`
Created database ‘db/development.~~~~’already exists
Created database ‘db/test.~~~’already exists
“`

`既にデータベースが存在している`とエラーが表示されます。

以上です。

元記事を表示

Railsを使ってアプリケーションを立ち上げる方法

# 結論
ターミナルで以下を入力
“`
$ rails new アプリ名

#具体例
$ rails new hello_world
“`
これで`hello_world`という名前のディレクトリが生成されます。その中にはrailsアプリを動かすために必要なファイルも生成されています。

## Railsバージョンを指定してアプリを立ち上げる場合
“`
$ rails _20.2.2_new アプリ名
“`

これでRailsのバージョンを指定することが出来ます。
実際に入力する際は、制作環境に応じたバージョンを入力してください。

## Railsバージョン,データベースを指定してアプリを立ち上げる場合
“`
$ rails _20.2.2_new アプリ名  -d DB名
“`
これでrailsのバージョン、データベースを指定してアプリを立ち上げることが出来ます。実際には制作環境に応じたデータベース名を入力してください。
(任意のDB名を入力してください)

元記事を表示

Rails のscaffold

駆け出しエンジニアのTakaです。
本日からQittaを書くことにしました。
よろしくお願いします。
本日のテーマは、scafoldです
アプリを作るためには、viewやcontroller,routesなど様々な機能が必要になってきます。
scaffoldはこれらの作業をまとめて行って、簡単にアプリケーションの雛形を作ってくれます。

“`
rails generate scaffold post title:string body:text
“`
を入力すると、
Postモデルは名前を表す「title」属性と年齢を表す「body」属性を持つとします。

“`
rails db:migrate
rails server
“`
必ず、データベースとやりとりできるマイグレーションファイルの作成もしておきましょう。

元記事を表示

【Docker】RailsにNginxを導入する方法

## はじめに
 本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## Nginx + Puma + Rails + MySQL
Dokerfileで親ディレクトリを参照するにはDocker-composeのbuildの箇所でcontextとdockerfileを指定します。

“`docker-compose.yml
version: ‘${COMPOSE_VER}’
services:
db:
platform: linux/x86_64
build: ./docker/db
command: –default-authentication-plugin=mysql_native_password && bash -c “chmod +x /docker-entrypoint-initdb.d/00_grant.sh”
heal

元記事を表示

【個人開発】ガン飛ばしてちょいワル気分になれるサービスを開発しました(-“-#)

# はじめに
突然ですが大人になるにつれ怒りの感情を表に出さなくなったと思うことはありませんか?
今回はそんな世の大人達の為にガン飛ばして遊べる~~物騒なクソ~~コンテンツアプリを作成しました!
– 普段優しそうというイメージを持たれてるけど、たまには悪ぶりたい人
– 舐められたくない人
– いざという時のために相手を威嚇する練習をしたい人
– 今むしゃくしゃしている人
– 東京リベンジャーズが好き!

そんな方々に是非使ってみて欲しいサービスです◎

本記事では主な機能や技術面の紹介をさせて頂きます。
面白い!と思って頂けたらエンジニア冥利に尽きます…!

# サービス概要
[![Image from Gyazo](https://i.gyazo.com/900b2d9980232c075a0feb785600a0bf.png)](https://gyazo.com/900b2d9980232c075a0feb785600a0bf)
カメラに向かってガン飛ばすだけ!
「たまにはちょっと悪ぶりたい〜(-“-#)」
そんな少しやんちゃな想いを叶えるサービスです◎

https://

元記事を表示

.envファイルについて

# はじめに
アプリ制作を進める中でよく分からず.envファイル使用していたのでこちらについて調べて見ました。

# .envファイルとは
環境変数を書きことができるファイルのことです。
こちらを使用することで、開発環境と本番環境を切り替えたり、データベースなどの接続情報の変更を行うことができます。
例えば開発環境では簡易的に利用できるsqliteのデータベースに接続し、本番環境ではmysqlのDBに接続といった変更が可能です。

# 環境変数とは
全てのプログラムで一緒に使える値を入れておく箱のことです。
例えば、アプリのフォルダーの直下に.envファイルに環境変数を書き込めば、そのフォルダー内で環境変数が扱うことができます。

# Railsで.envファイルを使用する場合
Gemfileに以下を記述

“`Gemfile
gem ‘dotenv-rails’
“`

gemを インストール

“`bash
$ bundle install
“`
こちらを使用することで、プロジェクト毎に環境変数が扱えるようになります。
# 使用例
簡単ではありますが、使用例を紹介します。

元記事を表示

Rails migration

### 命名規則
“`terminal.sh
rails generate migration CreateProducts name:string
rails generate migration AddPartNumberToProducts
rails generate migration RemovePartNumberFromProducts
rails generate migration AddUserRefToProducts user:references
rails generate migration CreateJoinTableCustomerProduct
“`

### changeを使う
Active Recordがマイグレーションを逆進させる(以前のマイグレーションに戻す)方法を自動的に理解してくれるため、多くの場面で利用できます。up/downを書かなくて良い。

– add_column
– add_foreign_key
– add_index
– add_reference
– add_timestamps
– change_colum

元記事を表示

Dockerで、Rails 6系とMySQL8の開発環境の構築(OS : mac)

# Rails 6系とMySQL8 で開発環境を作る

docker-compose upでrails serverを起動できるようにすること
ホストのファイルシステムとコンテナのファイルシステムを同期させること
勉強中の初学者です。誤りなどのご指摘いただければ嬉しいです!

## 流れ
1. 各種ファイルの作成
2. イメージのBuild
3. `rails new` でアプリ作成 -> `Gemfile`が上書きされる
4. 新しい`Gemfile`でイメージの再ビルド
5. `database.yml` の設定,DB生成
6. コンテナ起動&サーバ起動
7. 確認

### 各種ファイル作成
下記を作成します。
`dockerfile`
`docker-compose.yml`
`Gemfile`
`Gemfile.lock`

“`
$ mkdir docker_rail_mysql
$ cd docker_rail_mysql
“`

#### dockerfile作成

“`dockerfile
FROM ruby:2.6

RUN apt-get updat

元記事を表示

rails_tutorial chapter7 part2 <忘備録>

form_withは重要なパートですね。

まず下処理として、以下の記述
“`users_controller.rb



def new
@user = User.new
end
“`

view側で以下を記述

“`app/views/users/new.html.erb

Sign up

<%= form_with(model: @user, local: true) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>

<%= f.label :email %>
<%= f.email_field :email %>

<%= f.label :password %>
<%= f.password_field :password %>

<%= f.label :password_

元記事を表示

カレンダーミニアプリを作ってみた

RailsのGemであるSimple Calendarを利用して、ミニアプリを作ってみた。

## アプリの新規作成
まずはアプリの新規作成から。
ターミナルで以下を実行する。

“`:ターミナル
rails _6.0.0_ new minicalendar -d mysql
“`

次にencodingの設定を変更。

“`yaml:config/database/yaml
default: &default
adapter: mysql2
encoding: utf8 #ここを変更する
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
“`

.gitignoreファイルの一番下の行に、.Ds_Storeと追記。

“`:gitignore
/public/packs
/public/packs-test
/node_modules
/yarn-error.log
yarn-debug.log*
.yarn-integrity
.Ds_Store #ここに追記
“`

元記事を表示

WebブラウザはDELETEリクエストを発行できない

# ハマったこと
下記のようにdeleteリクエストを指定して送信したがGETメソッドになってしまう。
“` ruby: _header.html.erb
<%= link_to "Log out", logout_path, method: :delete %>
“`
#### 出たエラーメッセージ
Routing Error
No route matches [GET] “/logout”

# 原因
どうやらブラウザからDELETEリクエストを送ることができないみたいです。
[参考にした記事](https://teratail.com/questions/305773) ← 理由も乗ってます。
# 対策
link_toメソッドではなく、button_toメソッドで解消できるみたいです。
もっといいやり方ないんだろうか、、、
“` ruby _header.html.erb
<%= link_to "Log out", logout_path, method: :delete %> # 削除した
<%= button_to "Log out", logout_path,

元記事を表示

【Ruby】みんな理解出来てる?テンプレートメソッドパターンのこと。

# テンプレートメソッドパターンとは?
テンプレートメソッドパターンは[GoF](https://gimo.jp/glossary/details/gang_of_four.html)のデザインパターンの一種です。

このパターンは、基底クラスに不変の部分を記述し、変わる部分はサブクラスに定義するメソッドにカプセル化するというモノです。
`変わるものと変わらないものを分離する`という設計の考えに基づいています。

つまり次の2つのオブジェクトによって構成されます。

“`ruby
– 骨格となる「抽象的な基底クラス」
– 実際の処理を行う「サブクラス」
“`

## メリット
– 基底クラス側に、「不変の基本的なアルゴリズム」を配置可能になる。
– 「高レベルの処理を制御すること」に集中できる。
– サブクラス側に、「変化するロジック」を置ける
– 「詳細を埋めること」に集中できる
– 似通った部分を共通化して「サブクラスに対してスーパクラスで実装されている抽象メソッドを実装する」という責任を与えることが可能になる。

## 実装例

### 基底クラス

“`r

元記事を表示

【Ruby】構造体クラスを使いこなしたい。

# 概要
みなさん。「構造体クラス」使ってますか?
たくさん利用してる人もいれば、聞いた事もない人がいるかと思います。
便利なRubyのクラスなのでぜひ頭の隅にでも置いておいてください!

## Sturctとは
Rubyにおける構造体クラス(Struct)は簡易的なクラスのようなものです。
明示的にアクセスメソッドを定義しなくても、構造体クラス外でメンバの参照・更新は可能です。

以下のような場面で使えます。
– まとまったデータを扱いたいが、クラス定義式を使ってクラスを作るまでもない場合。
– クラス内で特定のデータのまとまりを表現する場合。

### 定義方法

以下のように定義することで構造体クラスを使えるようになります。

“`ruby
# Struct.new(‘構造体クラス名’, メンバ)
Struct.new(“User”, :name, :age)

# 第一引数を省略する事も可能
User = Struct.new(:name, :age)

# クラスのように定義する事も可能(非推奨)
class User < Struct.new(:name, :age) e

元記事を表示

【Rails】なぜ”private” “protected” “public”に分けるのか

# 概要
あるメソッドを実装するときに「アクセス権をどうするか?」という問題に必ず直面すると思います。
それぞれの特徴を知っておくことで、効率良く設計・開発が可能です。
ちなみにこれは`カプセル化`と言い、、オブジェクト同士の紐付き(関係性)を薄くし独立性を高め、再利用や交換といった保守性を高める効率の考え方です。

## 特徴
### publicメソッド

“`
– クラスの主な責任や目的を明らかにする
– 外部から実行されることが想定される
– 思いつくままに変更されたりはしない
– 他者が依存したとしても安全
– テストで完全に文書化されている
“`

### privateメソッド

“`
– 実装の詳細に関わる部分
– 外部から実行されることは想定されていない
– 変更されやすい
– 他者が依存するのは危険
– 基本的にはテストはしない(個人的な意見です。諸説あり。)
“`

### protectedメソッド

“`
– 外部からは隠蔽されている
– 仲間(自クラスかサブクラスのレシーバー、親子関係にあるクラスのみ)からは実行可能
“`

## 判断のポ

元記事を表示

rails_tutorial chapter7 part1 <忘備録>

開発環境でデバッグを表示する

<%= debug(params) if Rails.env.development? %>

/users/1 のURLを有効にするために、routesファイル(config/routes.rb)に次の1行を追加します。
“`routes.rb
resources :users
“`

以下のroutesが用意される。

| 1 | 2 | 3 | 4 | 5 |
|:-:|:-:|:-:|:-:|:-:|
|HTTPリクエスト|URL | アクション | 名前付きルート | 用途 |
| GET| /users | index | users_path | すべてのユーザーを一覧するページ |
| GET | /users/1 | show | user_path(user) | 特定のユーザーを表示するページ |
| GET | /users/new | new | new_user_path | ユーザーを新規作成するページ(ユーザー登録) |
| POST |/users | create

元記事を表示

OTHERカテゴリの最新記事