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

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

中間テーブルへのデータの保存の仕方

今日は現役テックキャンプ生のアプリ開発Day8分を記述します。今回は中間テーブルへのデータの保存の仕方について記述します。まず、中間テーブルの説明から始めます。

# 中間テーブルとは?
テーブル間で多対多のアソシエーションが発生する時、間に交通整理員を置くようなイメージで中間テーブルというものを作成します。中間テーブルに関しては下のメチャクチャわかりやす記事を参考にしてください

https://qiita.com/Lotuswhite/items/0794b468ecc627e01ae1

# 今回のDB設計
今回は私自身のアプリ開発で利用しているUserとRoom(userが参加する場所)のテーブルを例に説明します。2つのテーブルのアソシエーションを確認します。
・userは複数のroomに参加できるので、userは複数のroomを持っていると言えます。
・roomには複数のuserが参加しているので、roomは複数のuserを持っていると言えます。
以上より、userとroomは多対多のアソシエーションなので、中間テーブルとしてuser_roomを作成します。

# マイグレー

元記事を表示

【個人開発】ITエンジニアの経歴書

# 作ったもの

ITエンジニアの経歴書を作成するWebツールを作りました。

こちら -> [KEIREKI(仮名)](https://keireki-it-engineer.com)

# 作った経緯

今月で勤めている会社を退職することになり、次の職場を探すにあたりスキルシートを書いていたんですが中々良いフォーマットがなくて困ってました。
それなら、ついでに作ってしまおう! ということで作ってしまいました。

# 使った技術

## フロントエンド
– 言語
– TypeScript
– メインフレームワーク
– React
– Next.js
– デプロイ環境
– AWS × Amplify
## バックエンド
– 言語
– Ruby
– メインフレームワーク
– Rails
– データベース
– PostgreSQL
– デプロイ環境
– AWS
– ECR
– ECS Fargate
– RDS

# 良かった点
色々勉強になったこと。

# 今後の展開
このサービスを求人サービス化したい。

# おねがい
とにかく、

元記事を表示

【Rails】javascriptで入力フォーム(textarea)の高さを自動で変えたいよ

# はじめに
textareaの高さが固定の場合、改行していくと前の文章が埋もれていってしまい、かなりUXが悪い。
これを改善するために、Javascriptを導入し、改行に合わせて高さが自動で変わるようにしていく。
意外と一連の流れを記載している記事が少なかったため、かなり殴り書きだが投稿する。ただし、自身が実施した流れのため環境によって要不要がある。
使用環境は以下の通りである。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
| 3 | turbolinks| 5.2.0 |
| 3 | webpacker | 4.0.7 |

**変更前(右のスクロールバーが出る)**
![gif2.gif](https://qiita-image

元記事を表示

経験ゼロの新人が1ヶ月でウェブアプリを作らされるヤバい研修 part 3

Part 1はこちら↓

https://qiita.com/Terao-Takumi/items/d2b02a4cf0470675107e

# 前回のあらすじ

DB設計から2週間で、実装したい機能がすべてできてしまった。手動テストもできていたので、結構時間が余るな…何しよっか…というところで、、、

# リファクタすっか!

新人2人が書いたコードは、動きはするものの見るに耐えないものだった…。書いた本人たちはそこそこ書けたつもりだったけれど、先輩に指摘をもらってようやく何がだめなのかが理解できた。今見返すと恥ずかしくて⌘Qを連打したくなるレベル。

例えば、、、

### ・いろんなところで全く同じコードが複数回出てきている

「気持ち悪いな…これ絶対まとめた方がいいだろうなぁ」と思っていた箇所に案の定指摘をもらった。エンジニア的に言うと「冗長なコード」というらしい。メンテナンス性が下がってしまうのが一番のデメリットだけれど、個人的にはそもそも”美しくない”と思っていた。

### ・変数名が意味不明

part 2のコードでも書いたような、「a」とか「b」とか読ませる気のない

元記事を表示

Railsのレスポンスに任意のHTTPヘッダを追加するRackミドルウェア

“`ruby:config/initializers/additional_http_headers.rb
class AdditionalHTTPHeaders
def initialize(app)
@app = app
end

def call(env)
status, headers, body = @app.call(env)
additional_headers.each{|k, v| headers[k] = v }
[status, headers, body]
end

private
def additional_headers
{
‘x-foo’ => ‘bar’,
}
end
end

Rails.application.config.middleware.insert_before(
ActionDispatch::Cookies, AdditionalHTTPHeaders
)

“`

元記事を表示

Railsのrakeタスク

# 定義されているタスクの確認
“`
% bundle exec rake -T
“`

# rakeタスクの作成
## ファイルの作成
“`
% rails g task :namespace :task_name
“`
lin/tasks/task_name.rbが作成される。
## 作成されたファイル
“`ruby:task_name.rb
namespace :namespace do
desc “TODO”
task task_name: :environment do
end
end
“`
## 実行したい処理を記述
“`ruby:task_name.rb
namespace :task_name do
desc ‘あいさつをする’
task task_name: :environment do
puts ‘おはようございます’
end
end
“`
`desc`には処理内容の説明を記載する。
`:environment`はRailsで準備されているenvironmentタスクを先に実行している。

# rakeタスクの実行
“`
% bu

元記事を表示

Rails関連で記事にするほどじゃないけど、まとめておきたいものを列挙する感じの記事です

# マイグレーションファイル

マイグレーションファイルは、データベースを生成する際の設計図になるものです。

また、マイグレーションファイルを実行することで、記述した内容に基づいたデータテーブルが生成されます。

# リレーショナルデータベース 【relational database】 RDB / 関係データベース

リレーショナルデータベースとは、データベースの構造の一つで、一件のデータを複数の属性の値の組として表現し、組を列挙することでデ

ータを格納していく方式。属性を列、組を行とする表(テーブル)の形で示されることが多い。最も普及している方式で、単にデータベースとい

った場合はリレーショナルデータベースであることが多い。

元記事を表示

Railsでの一覧機能作成手順

# はじめに
初心者なりにまとめたものになりますので、諸先輩方からは何書いてんだおめえと感じる部分があると思います。
そう感じた際は、お手数ですが、コメント頂けると幸いです。

内容としては、 ***コントローラー作成からマイグレーション***になります。

## 目次
– ***一覧機能を実装する手順***
-routes.rbファイルの編集
-ルーティングの確認
-コントローラーの作成
-indexアクションの定義
-ビューファイル作成・編集
-ビューの実装確認
-モデルの作成
-マイグレーションファイルの編集
-マイグレーションの実行

## routes.rbファイルの編集
– ***app/config/routes.rbに存在するファイルの編集***
初期は
Rails —— do
~~
end
が存在し、~~の箇所へ下記のコードを入力
※作成したばかりの時は、~~の中身は削除する
#
get ‘posts’, to: ‘posts#index’
HTTPメソッド ‘URIパターン’, to: ‘コントローラー名#アクション名’

***解説*

元記事を表示

レコード数が膨大のカラムにダウンタイムなしでindexを貼る方法

## はじめに
MySQLで、レコード数が膨大のカラムに index を貼ろうとすると、デプロイ時に落ちることがありました。
この記事では、実際に行ったダウンタイムなしで index 貼る方法を紹介します。

### 簡単なDB構成
今回は、User テーブルの point カラムに対して index を貼ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/833332/a5096689-3568-7e43-e4fa-c4f9da3778a1.png)

## 手順
– index を貼った point_new カラムを追加し、deploy
– point の値を point_new に移すスクリプトを流す
– rename する migration ファイルを作成し、deploy

### index を貼った point_new カラムを追加
User テーブルに、point_new というカラムを追加します。
カラムの追加に関しては、[こちらの記事](https://qiita

元記事を表示

僕が初心者にRailsを勧める理由

## 最初に

プログラミングを学習しよう!って思った時に

・どの言語を選んでいいかわからない
・Webアプリを作りたい

と思った方に僕は強くRuby(Ruby on Rails)をおすすめしてます

今回はなぜおすすめなのかという理由を書いていきたいと思います

前提としてRuby単体ではなくフレームワークのRailsもセットでおすすめしています

### 開発速度が早すぎる

なんと言ってもこれ

例えば掲示板アプリなどを作ろうとした時PHPを使ったりするより倍以上の速さでRuby(Rails)は作れます

開発速度が早いのですぐになにか作品が作れます

そうなると学習をはじめて早い

>作品ができた!

と自信に繋がります

モチベーションも上がりますしね

当サイトでもたっち1日でRailsでWeb開発からリリースまで行える講座を用意しています

### コードがスッキリ

かなりスッキリしていて見返す時にわかりやすいんですよね

この2つは同じ意味を持つコードです

まずはJavaScript
“`javascript:
var manga = [‘DB’, ‘ハガレン

元記事を表示

Factory Bot コマンドチート

## モデル

`bin/rails g factory_bot:model models`

実行結果
` create test/factories/models.rb`

## 作成ファイルの場所指定

`bin/rails g factory_bot:model models –dir spec/factories`

実行結果
` create spec/factories/models.rb`

元記事を表示

昔ばなし「Active Record の条件付きコールバックで苦戦太郎」

昔々あるところに、おじいさんとおばあさんが Web アプリケーション開発をしていました。
おじいさんはバックエンドを、おばあさんはフロントエンドを担当していました。

ある日突然、おばあさんはおじいさんに次のような仕様を言い渡しました。

「おじいさんや、`User` の `email` が更新された際に `some_function` が実行されるようにしておくれ。」

急な仕様変更に戸惑いながらも不承不承ながら了承したおじいさんは、とりあえず現在の実装を確認しました。
`user.rb` を開くと、以下のように実装されていました。

“`rb:user.rb
after_update :some_function, if: :saved_change_to_name?

def some_function
p “some_function called!”
end
“`

上記では `name` が更新された後に `some_function` が実行されるようになっています。

おじいさんは「`:saved_change_to_name?` を `:sa

元記事を表示

TypeError – no implicit conversion of nil into String エラーの解消

# エラーの状況
“`ruby
class XXX
def XXX
content = ”
content << @user.name return content end end ``` 空のstringクラスのcontentに、@user.nameで取得した値(今回の場合はnil)を結合して、そのcontentを返すメソッドをあるモデルに定義したが、`TypeError - no implicit conversion of nil into String` が発生した。nilからstringへの暗黙の変換はないとのこと。 # TypeErrorとは リファレンスから引用。 >メソッドの引数に期待される型ではないオブジェクトや、期待される振る舞いを持たないオブジェクトが渡された時に発生

contentのメソッド<<にnilが渡されていることが原因か? # Stringのインスタンスメソッド << ```ruby # 例 content = '' content << "tomato" p content # => “tomato”
“`
引数で与えられ

元記事を表示

パンくずリストの作成 breadcrumbs

# 導入
パンくずリストの導入にはgretelというgemが便利。
“`
gem ‘gretel’
“`
“`
% bundle install
“`
“`
% rails g gretel:install
“`
上記のコマンドで、configディレクトリ直下にbreadcrumbs.rbが作成される。

# パンくずリストの作成
例として、トップページ→投稿一覧→投稿詳細という階層のリストを作成する。
“`ruby
crumb :root do
link “Top”, root_path
end

crumb :post_index do
link “投稿一覧”, posts_path
parent :root
end

crumb :post_show |post| do
link “投稿詳細”, post_path(post)
parent :post_index
end
“`
対象のviewファイルに下記のように記載する。
“`erb
<% breadcrumb :post_index %>
<% breadcrumb :post_show, @po

元記事を表示

Rubyの条件分岐の使い分けについて

条件分岐を実装するシチュエーションがあり、使い分けの定義が曖昧だったのでいろいろ調べてまとめてみました。
基本的な内容です。

# 条件分岐とは
「〜な時〜な処理をする。」というものです。点数が80点以上であればgreat、60〜80点であればgood、60以下であればbadみたいな感じで結果に応じた処理を行うものです。
## if文
“`if 条件 then 処理 end“`のような感じで書きます。条件がtrueの時に処理が実装されます。
“`
if score >= 80
puts “Great”
elsif score >= 60
puts “Good”
else
puts “Bad”
end
“`

## unless文
“`unless 条件 then 処理 end“`のような感じで書きます。条件がfalseの時に処理が実装されます。ifの逆バージョンです。
“`
unless score >= 60
puts “合格”
else
puts “不合格”
end
“`

## case文
“`case 評価する式 when 条件 処理 en

元記事を表示

ActiveAdminのラジオボタンの初期値をセットする方法

# 概要
checkboxであれば、`input_html {value: :enabled}`で初期値をセットできた(はず)ですが、
radiobuttonだとうまくいかなかったのでnewアクション内で初期値をセットしました。

# コード
“`
ActiveAdmin.register Sample do
controller do
def new
@sample = Sample.new
@sample.show_flg = Sample.show_flgs[:enabled]
end
end

form do |f|
f.inputs do
f.input :show_flg, as: :radio, collection: Sample.show_flgs_i18n.invert
end
f.actions
end
“`

元記事を表示

昨日までの投稿を削除するバッチ処理

## 記事の対象者
バッチ処理で投稿のデータを管理したい人

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 実装の流れ
**1、削除プログラムの作成
2、gem【whenever】の導入**

## 削除プログラムの作成
app/libの配下にbatchフォルダを作成します。
次に作成したbatchフォルダの中でdata_reset.rbファイルを作成して以下を記述して保存します。

“`php:app/lib/batch/data_reset.rb
class Batch::DataReset
def self.data_reset
@activity_points = ActivityPoint.all.where(“date <= ?", Date.yesterday) @activity_points.delete_all p "前日の活動拠点を全て削除しました" end end ``` コードの解説をします。 私は活動日が昨日になっているものを削除するプログラムを作成しました。 ActivityPointモデル内にある

元記事を表示

[RSpec] トップレベルに定義されたメソッドをモックする方法

## サンプルコード
トップレベルに定義した`hoge`メソッドをモックして、モックできたことの検証を行うテストです。
“`ruby:hoge_spec.rb
require ‘rspec/core’

def hoge
‘?’
end

RSpec.describe ‘トップレベルに定義されたメソッドをモックする’ do
it ‘モック前に?を返し、モック後に?を返す’ do
expect(hoge).to eq ‘?’

allow_any_instance_of(Object).to receive(:hoge).and_return(‘?’)

expect(hoge).to eq ‘?’
end
end
“`

上記のテストをRSpecで指定して実行すると、成功します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468458/fa32148e-399f-5a6d-ebe8-8fab79e9fbdc.png)

## なぜ成立するのか?

元記事を表示

Railsでのアプリケーション新規作成手順

# はじめに
初心者なりにまとめたものになりますので、諸先輩方からは何書いてんだおめえと感じる部分があると思います。
そう感じた際は、お手数ですが、コメント頂けると幸いです。

内容としては、 ***フォルダ作成からSequel Proへのデータベース作成までの手順***になります。

## 目次
– ***アプリケーション新規作成手順***
-アプリ作成場所
-rails newの実行
-アプリ名のディレクトリにいることを確認
-データベースを作成

## アプリ作成場所
– ***作成したい場所へファイルを作成***
私は、ホームディレクトリに”projects”という名前のフォルダを作っている。

## rails newの実行
ターミナルを立ち上げ、ホームディレクトリにいることを確認(`pwd`を実行)した後、下記のコマンドを実行

#
rails バージョン名 new アプリ名 -d db管理システム名

例.
rails _6.0.0_ new first_app -d mysql

***解説***
– rails ~~~~ newの~~~~

元記事を表示

Rails2系? pagenateでdistinctしたかった

誰が今更こんなことを調べようか。

## 開発環境

* Ruby 1.8.7
* Rails 2.1.0
* SQLServer2008

~~なんだこの化石のような環境は~~

## 問題

pagenateでDISTINCTが使えない。

“`ruby
@data = VData.pagenate(:all,
:select =>’DISTINCT *’, # <= こういうのはNG :distinct => true, # <= こんなものはない :page => 1,
:per_page => 20
).distinct # <= できません ``` ## 調査 調べても新しいのしかでないよね。そりゃ。 と思ったらこんな記事が。 https://rubricks.hatenadiary.org/entry/20070419/1176957966 > paginateの中で
(1):distinctオプションがなぜか不正としてはじかれてしまう

> (2)paginateからcou

元記事を表示

OTHERカテゴリの最新記事