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

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

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

元記事を表示

【Rails】【いいね数】1人のuserの全ての投稿に紐付くいいね数を取得する方法

先日ポートフォリオを作成していた際に、少し悩んだことを復習がてら書いていきたいと思います。

### 【環境】
– Rails 6.1.5.1
– ruby 2.6.3

### 【前提】
– 投稿機能を実装済み(この記事では、Postモデル)
– いいね機能を実装済み(この記事では、Favoriteモデル)

### 【リレーション】
– UserとPost(1対多)
– UserとFavorite(1対多)
– PostとFavorite(1対多)

### 【実現したいこと】
 タイトル通り(少し分かりにくい日本語かも)ですが、ある1人のuserの全投稿に紐づく全てのいいね数を表示させたいと思います。
 userの詳細ページを作成している際に、この全いいね数を表示させたいなと思ったのがきっかけです。

### 【方法】

#### ①userの全投稿数を取得(関係ないですが、復習のため)
 これは簡単ですね!countメソッドを使って数えます。
“`ruby
user.posts.count
“`
#### ②次に、1つのpostに紐づくいいね数

“`ruby
post.

元記事を表示

stylesheet_link_tagとstylesheet_pack_tagの違い(自分用)

https://zenn.dev/ryouzi/articles/da8a77accc221e

元記事を表示

minitestでエラー`block (2 levels) in

# はじめに
minitestでテストを書いていると、
下記の部分でfailになった。
“`言語名:ターミナル
FAIL[“test_index_as_admin_including_pagination_and_delete_links”, #, 2.8298179999983404]
test_index_as_admin_including_pagination_and_delete_links#UsersIndexTest (2.83s)
Expected at least 1 element matching “a[href=”/users/14035331″]”, found 0..
Expected 0 to be >= 1.
test/integration/users_index_test.rb:19:in `block (2 levels) in

元記事を表示

[React/Rails] WebSocket connection to ‘ws://localhost:3000/ws’ failed が発生してレスポンスが受け取れない

## 動作環境
MacOS M1 BigSur 11.6
Docker “20.10.8”
node “14.17.5”
yarn “1.22.5”
react-scripts “5.0.1”
axios “^0.27.2”
Rails “6.1.6” APIモード

## 結論
Reactのルートディレクトリ直下に.envファイルを作成し、下記の記述をする
“`/.env
WDS_SOCKET_PORT=0
“`

## エラー内容
React/TypeScriptで作成したアプリケーションからRailsのAPIへリクエストを送信したところ下記エラーが発生した。
![スクリーンショット 2022-06-20 22.41.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685944/4c8c1ab2-2ef2-3cf2-533c-a931cb35fcd3.png)

“`
WebSocket connection to ‘ws://localhost:3000/ws’ failed
“`

元記事を表示

【rails】プルタブ式の生年月日フォームを簡単に追加するDay6

今日もお疲れ様です。今日はhtmlのパーツの配置とdeviseでユーザー登録機能を導入していました。今回は下写真のようにプルタブ式の”生年月日”を追加で実装するrailのヘルパーメソッド「f.date_select」について、簡易的にまとめます。
![スクリーンショット 2022-06-20 22.35.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707093/e83161b2-b88a-7888-1366-9f42715b08a7.png)

# 生年月日をテーブルに登録できるようにする
顧客に入力してもらった生年月日をデータベースに登録する場合はお読みください。やり方は結論から言って、マイグレートファイルにカラムを追記し、生年月日データを受けと取れるようにする必要があります。記述方法は以下
“`ruby:〇〇〇〇〇〇〇〇_create_テーブル名.rb
t.date :birthday
“`
注意点ですが、記述する前に「rails db:migrate:status」でマイグレート

元記事を表示

OTHERカテゴリの最新記事