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

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

【Ruby・Rails】ダックタイピング

# ダックタイピングとは?

ダックタイピングはRubyのような動的型付け言語でよく使われるプログラミングの概念です。この概念は、「もしオブジェクトがカモのように歩き、カモのように鳴くなら、そのオブジェクトはカモである」という考え方に基づいています。つまり、オブジェクトの型よりも、そのオブジェクトがどのようなメソッドを持っているか(どのように「振る舞う」か)が重要とされます。

“`ruby:ダックタイピングを使った例
# オブジェクトの型よりも、そのオブジェクトがどのようなメソッドを持っているか
# Duck, Lion, Sheep, Zekromはそれぞれquackというメソッド・振る舞いを持っている状態
class Duck
def quack
“クワ!”
end
end

class Lion
def quack
“ガオー”
end
end

class Sheep
def quack
“メェメェ”
end
end

class Zekrom
def quack
“ババリバリッシュ!!”
end
end

du

元記事を表示

【Docker Rails】HerokuのclearDBのIgniteプランが終了するそうなので、renderに移行した話

## 前提
最近、こんなメールが届きました。

>Dear Valued ClearDB Customer,
We are improving and modernizing our ClearDB platform. As result, the Ignite Plan that you are currently subscribed to will be retired on January 15th, 2024. If you would like to continue using ClearDB MySQL databases, you will need to upgrade to the Punch Plan which is $9.99 per month.

翻訳
>ClearDBをご愛顧いただいている皆様へ、
弊社は ClearDB プラットフォームの改善と近代化を進めております。そのため、現在ご契約いただいている Ignite プランは 2024 年 1 月 15 日に終了いたします。引き続きClearDB MySQLデータベースをご利用になりたい場合は、月額

元記事を表示

railsのroutes.rbとは

# はじめに
最近railsを勉強し始めて、routes.rbの書き方を自分に中で復習したかったので、ここでまとめてみます
## routes.rbとは
railsのroutes.rbとは、ブラウザから届いたリクエストに対して、コントローラーで定義したアクションを結びつけるための書くファイルのこと

具体的なコードを書いてみると以下のような感じ
“`routes.rb
Rails.application.routes.draw do
root “static_pages#home”
get “/help”, to: “static_pages#help”
post “/login”, to: “sessions#create”
delete “/logout”, to: “sessions#destroy”
end
“`
root,get,post,deleteなど色々書いてありますが、詳しく中を確認していきます
### rootとは(コード:1行目) 
“`rb
root “static_pages#home”
“`
誰か

元記事を表示

Railsの命名規則

### -命名規則が必要な理由-
1. 命名を制限してプログラマの揺らぎを減らすため。
→開発者をあえて縛って、迷いにくく手間も少ない開発環境を実現するため。

1. 名前から意味を把握するできるようにする。
→コードを読むのに文中に登録する要素の中身がある程度推測できれば、可読性をあげる。

#### Modelの命名規則
**Model名**

単数形で、
コード中 = **キャメルケース**
ファイル名 = **スネークケース**
になります(Rubyのクラス名の命名規則と同じ)。

キャメルケース
→単語の頭文字を大文字・それ以外を小文字で記述する表記法です。
例:`Book`,`MyName`など

スネークケース
→単語をすべて小文字にし、単語の区切りを_で記述する表記法です。
例:`book`,`my_name`など

**Modelの属性名**
**キャメルケース**で記述します。

ActiveRecordの予約語は避けてください。
例:`type`など。

誤作動を起こす可能性があります。

制約ではありませんが、日時型の属性は`_at`に命名するのが基本です。

元記事を表示

text型のindex設定時は長さを指定する

# 前提
– Rails 7.0.4
– MySQL8系(docker)

# エラー内容
text型のindex設定でマイグレーションしたら

“`
add_index :table_name, [:not_text_column, :text_column]
add_index :table_name, :text_column
“`

エラーが起きた

“`

rails aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: BLOB/TEXT column ‘normalized_value’ used in key specification without a key length

Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: BLOB/TEXT column ‘normalized_value’ used in key specification wi

元記事を表示

Ruby,Railsのバージョンアップ

# 背景
– Ruby2.7.7とRails6.0.6.1で開発したアプリを運用します。デプロイ先はherokuで特に問題なくアプリは動いていました。
– しかしながら、Ruby2.6.ZとRails6.1.Zでは、Status(Rails Maintenance Plicy)が「EOL」となっています。
– そこで、Status(Rails Maintenance Plicy)が「Maintained for Security Issues」となっているRuby3.0.ZとRails6.1.Zへのバージョンアップを試みました。

<参考記事>

https://www.fastruby.io/blog/ruby/rails/versions/compatibility-table.html

# 現在のバージョン
Ruby:2.7.7
Rails:6.0.6.1
bundler:2.4.13
node:16.20.0
npm:8.19.4
yarn:1.22.19
webpack:4.46.0
※開発環境は、macOS Monterey バージョン12.1です。
※エディターは、VS

元記事を表示

【Rails】 local: trueについて

# local: trueについて

## local: trueとは
Railsはデフォルトで同期処理になっています。
しかし、form_withはデフォルトで非同期処理(ajax)になっています。
※Rails5.2< あなたが使用しているRailsのバージョン < Rails 7.0の状態の場合 そこで、下記のようにform_withにlocal: trueオプションを付与することで、form_withが非同期処理から同期処理に変更されます。 それがlocal: trueオプションになります。 ```ruby <%= form_with model: @board, class: 'new_board', local: true do |f| %>

<%= f.label :title %>
<%= f.text_field :title, class: 'form-control' %>
元記事を表示

mysql2インストール時のエラー対応

# 前提
– macOS:13.0(22A380)
– ruby:3.1.4p223 (2023-03-30 revision 957bb7cb81) [arm64-darwin22]
– rails:7.0.4
– bundler:2.3.26
– mysql2:0.5.5

# サマリー
– mysql2インストール時に、opensslの読み込み先が間違っているためエラーになる
– なので、読み込み先を指定してあげる必要がある
– 自分の場合は、[opensslのリンク先の設定を行い](https://zenn.dev/obregonia1/articles/2a804d3a3ecb17)、[mysql2のビルドオプションの指定](https://rooter.jp/environment/bundle-install-mysql2-on-m1/)で解決した

# 作業ログ
mysql2をbundle installすると、

“`
Fetching mysql2 0.5.5
Installing mysql2 0.5.5 with native extensions
Gem:

元記事を表示

Ruby on Rails5 速習実践ガイドを読んで

# はじめに
今回はrailsインプット学習の一環として
[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227)を読了しましたので、その感想・学んだことを記述していこうと思います。

* これから読もうと検討しているが、その前に一通り本書の概要を知りたい方
* 読了したが改めて本書の要点を整理したい方

といった方々にお役に立てれば幸いです。

# よかったところ
### 簡単なアプリを作りながらrailsの基礎を学べる
表題にあるように、本書では簡単なTodoアプリとタスク管理アプリを作成しながらrailsを学ぶことができます。
2つ目のタスク管理アプリに関しては多

元記事を表示

投稿アプリのコメント機能

コメント機能の実装です
正直ここはすごく苦手です。。。
Xの素晴らしい出来に改めて尊敬です!

### 目的
– アソシエーションを復習
– ルーティングのネストの理解

コメントは、ツイートと別のテーブルで管理しなくてはなりません。
なのでコメントテーブルを作る必要があります
さらに、コメントはどの投稿に対してのコメントなのか、
誰の投稿したコメントなのか明示されている必要があります
そのため、userモデルとtweetモデルの2つにアソシエーションを組む必要があります

### Commentモデル作成
`rails g model comment`

#### マイグレーション編集
db/migrate/20XXXXXXXXXXXX_create_comments.rb
“`ruby
lass CreateComments < ActiveRecord::Migration[7.0] def change create_table :comments do |t| t.integer :user_id t.integer :tweet_id

元記事を表示

投稿アプリの複数ページで利用する表示の一部をまとめる

テックキャンプの復習です!
いいねお願いします!

### 目的
– 部分テンプレートの理解
– renderメソッドで描画方法を理解
– 部分テンプレートのメリットを理解

### 表示の一部をまとめて再利用しよう
#### 部分テンプレート
ビューファイルにおいて繰り返し使用するコードを切り出し、再利用する仕組み
rubyで繰り返し使うような処理をメソッドでまとめてきたのと同じ。

テンプレート自体のファイル名は、命名規則として、アンダースコア`_`を先頭に記述します

### 投稿表示一覧部分をまとめよう
`app/views/tweets`に`_tweet.html.erb`作成

#### renderメソッド
部分テンプレートを呼び出す際に利用するメソッド
#### partialオプション
renderメソッドで使用できるオプション
`partial`というオプションをつけ、部分テンプレート名を指定することで、該当する部分テンプレートを表示できる
例)
`<%= render partial: "sample" %>`
#### localsオプション
renderメソ

元記事を表示

投稿アプリの投稿表示順を並べる

テックキャンプのカリキュラムの復習です!
いいねお願いします!

“`ruby“`

### 目的
– orderメソッドの理解

### 投稿最新順表示
#### レコードの取得順変更
##### orderメソッド
ActiveRecordメソッド
テーブルから取得してきた複数のレコード情報を持つインスタンスの、並び順を変更するメソッド

`インスタンス = モデル名.order(“並び替えの基準となるカラム名  並び順”)`
ASC(昇順) DESC(降順)

app/controllers/tweets_controller.rb
“`ruby
def index
@tweets = Tweet.includes(:user).order(“created_at DESC”)
“`

元記事を表示

投稿アプリで本人のみ編集削除を許可しよう

オンラインスクールの復習のための備忘録です!
いいねお願いします!
### 目的
「deviseのメソッドを使用し、ユーザーのログインの有無を変える」など、アプリ制作において使用頻度の高い分岐を体験し、理解する

##ログイン中のユーザー情報取得
###投稿者本人か確認して表示を変えよう
編集ボタンと削除ボタンの表示部分をif文で囲う
“`ruby
~略~
<% if user_signed_in? && current_user.id == tweet.user_id %>

  • <%= link_to '編集', edit_tweet_path(tweet.id) %>
  • <%= link_to '削除', tweet_path(tweet.id), data: { turbo_method: :delete } %>
  • <% end %>
    ~略~
    “`
    `current_u

    元記事を表示

    【Rails】NOT NULL制約の設定方法

    カラムにNOT NULL制約を追加するにはマイグレーションファイルに以下のように記述します。

    “`rb

    def change
    change_column_null :テーブル名, :カラム名, false
    end

    “`

    `users`テーブルの`is_sample`カラムにNOT NULL制約を追加する場合は以下のようになります。

    “`rb

    def change
    change_column_null :users, :is_sample, false
    end

    “`

    元記事を表示

    Ruby on Rails入門者向け:基本メソッド12選

    この記事では、Rails初学者の私が知っておくべきだと感じた基本的なメソッドを12個、簡単な説明と共に紹介します。

    ### 1. find
    用途: 特定のIDを持つレコードを検索。
    例: User.find(1) – IDが1のユーザーを検索。
    ### 2. find_by
    用途: 指定した条件に一致する最初のレコードを検索。
    例: User.find_by(name: ‘Bob’) – 名前がBobのユーザーを検索。
    ### 3. all
    用途: 全てのレコードを取得。
    例: User.all – 全ユーザーを取得。
    ### 4. create
    用途: 新しいレコードを作成して保存。
    例: User.create(name: “Bob”) – 新しいユーザーを作成。
    ### 5. new
    用途: 新しいインスタンスを作成(保存はしない)。
    例: user = User.new
    ### 6. save
    用途: インスタンスをデータベースに保存。newメソッドとセットで使用。
    例: user.save
    ### 7. update
    用途: 既存のレコードを更新。
    例: user.upda

    元記事を表示

    Rails7でreact-rails( Shakapacker対応)を使う

    ## 概要
    今回はRails7でreact-railsのgemを使ってReactを使う方法を紹介します。

    https://github.com/reactjs/react-rails

    ## 初期設定
    基本的にはGitHubのドキュメントに従います。

    https://github.com/reactjs/react-rails/blob/master/docs/get-started.md#use-with-shakapacker

    ### プロジェクトの作成
    標準にするとWebpackerが入ってしまうのでそこはコマンドで後から入れられるようにします。
    “`
    rails new my-app –skip-javascript
    “`
    ### shakapackerをインストール
    shakapackerをインストールします。

    “`
    bundle add shakapacker –strict
    rails shakapacker:install
    “`

    ### Reactとパッケージをインストール
    React本体と本体を動かすためのパッケージをインストールします。
    “`

    元記事を表示

    投稿アプリマイページ機能の実装

    こちらも備忘録です!

    ### 目的
    – アソシエーションの理解
    – N+1問題の対策を理解

    ### ツイートにユーザー情報を追加
    「誰が投稿したのか」わかるようになり
    – 特定のユーザーがつぶやいたツイート一覧を取得できる
    – ツイートの削除を行う際につぶやいた本人しか削除できないように設定できる
    機能が実現可能になります

    #### tweetsテーブルにカラムを追加
    tweetsテーブルに新しく`user_id`というカラムを作成する
    そこにツイートを投稿したユーザーのidを保存します
    #### tweetsテーブルにuser_idカラムをinteger型で追加
    ターミナル

    `rails g migration AddUserIdToTweets user_id:integer`
    `rails db:migrate`

    ### ツイート保存時にユーザー情報も追加
    user_idカラムに、ツイートを投稿した(現在ログイン中の)ユーザーの
    idを保存する処理を記述
    ここに保存すべき値は、currenr_userのid
    #### current_userメソッド
    現在ログインしてい

    元記事を表示

    ghaにおけるrspecで発生するActiveRecord::ConnectionNotEstablished: MySQL client is not connected への対処

    ## エラー内容

    “`rb
    ActiveRecord::ConnectionNotEstablished:
    MySQL client is not connected
    “`

    ## 改善前の実装

    “`yml:.github/workflows/backend_test.yml
    name: Backend Test

    jobs:
    run-rspec:
    runs-on: ubuntu-latest
    services:
    mysql:
    image: mysql:8.0
    ports:
    – 3306:3306
    env:
    MYSQL_ALLOW_EMPTY_PASSWORD: “yes”
    “`

    ## 改善策

    ヘルスチェック周りのオプションを設定する
    これにより、rspec実行前にmysqlコンテナの起動が完了していることを確認できるようになる(はず)。

    ## 改善後の実装

    “`yml:.github/workflows/backend_test

    元記事を表示

    【Rails】rails generate controllerで生成されるファイルを制限する【Railsアプリ全体のジェネレータ設定変更】

    ※この記録は、プログラミング初学者である私が、行き詰まったり難しいと思ったりしたものを復習できる様にとして残している自分メモです。同じ様なところでつまずいている方のお役に立つことができれば尚よし。間違った記載等あれば教えていただければありがたいです。

    ## はじめに
    いろんなファイルを自動作成してくれるgenerateコマンド。しかし初期段階では何から何まで自動生成されると煩わしさを感じるものもあるからRailsにはジェネレーター実行時にファイルを生成しない為の設定も用意されている。
    今回は、config/application.rb内の設定によって、generate コマンドで生成されるファイルに制限をかけようかと。

    ## rails generation時の挙動を確認
    ターミナルでrails generation(またはrails g)を実行。
    下記の様な色々なファイルが自動生成される。

    “`
    $ bin/rails g controller boards
    Running via Spring preloader in process 26592
    [+] Running 2

    元記事を表示

    docker composeでRailsアプリをDocker化する

    ## はじめに
    今回はdocker composeで既存のRailsアプリをDocker化する方法を学んだので、
    アウトプットしていこうと思います。

    ## 前提
    * Docker未使用で動作する既存Railsアプリを使用する
    * 以下の環境で構築する
    “`
    ruby: 3.2.2
    Rails: 7.0.6
    postgre: 12
    docker-compose: 3.9
    “`

    ## 手順
    0\. Dockerのインストール & 起動
    1\. 任意の階層に作業ディレクトリを作成 & 移動
    2\. Docker化してない既存Railsアプリをクローンしてくる
    3\. 各種必要ファイルの作成
    4\. database.ymlの編集
    5\. コンテナ起動
    6\. ブラウザで動作確認

    ### 0. Dockerのインストール & 起動
    Docker(for Mac)のインストールおよび起動のやり方に関しては、
    下記URLを参考にしてみてください!

    https://matsuand.github.io/docs.docker.jp.onthefly/desktop/ma

    元記事を表示

    OTHERカテゴリの最新記事