Rails関連のことを調べてみた2020年09月25日

Rails関連のことを調べてみた2020年09月25日
目次

Railsプロジェクトを作成したあとにActiveRecordを使わないようにする

`rails new`するときに`–skip-active-record`オプションを付けなかった場合から付けた場合への差分です。

Railsプロジェクトを作成したあとに、DBを使わなくなった場合などの参考に。

Railsバージョン6.0.0.3

“`diff:.gitignore
– # Ignore the default SQLite database.
– /db/*.sqlite3
– /db/*.sqlite3-journal
– /db/*.sqlite3-*

– # Ignore uploaded files in development.
– /storage/*
– !/storage/.keep
“`

“`diff:Gemfile
– # Use sqlite3 as the database for Active Record
– gem ‘sqlite3’, ‘~> 1.4’

– # Use Active Storage variant
– # gem ‘image_processing’, ‘~> 1.2’
“`

元記事を表示

FizzBuzz問題を解いてみよう!

【概要】
—————————————-
1.結論

2.FizzBuzz問題とは何か

3.どのようにプログラムするのか

4.ここから学んだこと

1.結論
—————————————-
eachメソッドとif..elsifを組み合わせよう!

2.FizzBuzz問題とは何か
—————————————-
(i)1~100の数字を出力する際に、
(ii)3の倍数は”Fizz”
(iii)5の倍数は”Buzz”
(iv)15の倍数は”FizzBuzz”
を表示させる

というプログラムです!
基本的なことが理解できているかを試せる問題として有名です!

3.どのようにプログラムするのか
—————————————-

今回は使用する言語は”Ruby”になります。

“`ru

元記事を表示

【rails】enumのレコード登録数をバリデーションで制限する方法

## はじめに
開発を行っているとenumを使って、データを分ける場合があると思います。
enumで分けたデータに対してそれぞれレコードの登録数を制限する実装をしたのでメモとして残しておきます。

## 開発環境
Rails 6.0.3
Ruby 2.7.1

## テーブル
今回は下記のようなUsersテーブルを想定しています。
性別(sex)はenumでman/femaleのどちらかしか選択できないようにしています。

|name|sex(enum)|
|—|—|
|ユーザー1|man|
|ユーザー2|female|

## レコード数を制限する方法
models/user.rbにメソッドを作成し、man/femaleそれぞれのレコード数を確認して、もし制限数(10件)を超えていればエラーを追加します。
`on: :create`を記載しないと毎回バリデーションが適用され、編集できなくなってしまうので忘れないよう!
(私はここに気づかず編集の際にエラーが発生してしまいました。)

“`user.rb
class User < ApplicationRecord RE

元記事を表示

【Rails】on: :actionの条件付きで設定したコールバックはskip_callback、set_callbackを用いて回避することができない

skip_callbackとset_callbackを用いて一時的にコールバックを回避しようとしたらset_callbackがうまくいかなかった。その時の状況と回避策を記録。

### やりたいこと
こちらのコールバックを一時的にスキップしたい。
“`ruby
before_validation :func, on: :action
“`

### 最初にやったこと
`skip_callback`、`set_callback`を用いて実装した。

“`ruby
skip_callback(:validation, :before, :func)
——————————————
# 処理を実行
——————————————
set_callback(:validation, :before, :func)
“`

しかし、このあと他の動作に不具合が出てしまい、原因を調査した。

#### skip_callback、set_callbackとは

`skip_callba

元記事を表示

【Rails】ローカル環境のデータがおかしいから全部リセットしたい!と思うその前にすべきこと

## はじめに

以下のQiita記事を拝見しました。

[エラーが解決しない時は、元を断つという考え方 \- Qiita](https://qiita.com/TeppeiMimachi/items/755639c775c72cb73ad9)

詳しくは上記記事を読んでもらいたいのですが、簡単に要約すると「ローカル環境のデータがおかしくなったら、(データを消しても問題ないことを確認したうえで)データベースを再作成しよう」という内容です。

ただ、個人的には「うーん、あまりよくないな」と思ってしまったので、返信コメントを書こうと思いました。
コメントを書き始めたらかなり長くなってしまったので、独立した記事にしてしまおうと思いました。
それが本記事になります。

というわけで、ローカル環境のデータがおかしいから全部リセットしたい!と思うその前にすべきことを以下にまとめます。

## ローカル環境のデータがおかしいから全部リセットしたい!と思うその前にすべきこと

(注:以下の内容はもともと[冒頭に載せたQiita記事](https://qiita.com/TeppeiMimachi/it

元記事を表示

【Rails】開始時刻と終了時刻を保存する

# 開始時刻と終了時刻を保存する
railsで、タスクの開始時刻と終了時刻を保存するプログラムを作ります。
自己流の部分が多いので、あくまでやり方の1つとして参考にしてくださると幸いです。
※今回は、開始、終了時刻を保存することをメインに扱います。削除、編集機能や見た目は勘弁してください。

![画面収録 2020-09-25 2.57.23.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566871/80c7b5e2-fea2-c5b6-e5e8-09e0af4c518f.gif)

# 考え方
開始、終了フォームを1度だけしか押せない仕組みを目指します。
具体的には、タスクの開始時刻のデータが入っている場合は開始ボタンを表示しないように、ビューの中にif文を書きます。
この考えに至った経緯は、以下の通りです。

・タスク(Task)に、開始時刻(StartTime)と終了時刻(StopTime)を紐付ける
 →問題点:何回でも開始し、終了できてしまう。
・StartTimeのデータが入って

元記事を表示

エラーが解決しない時は、元を断つという考え方

どうも、三町哲平です。

プログラミングをしていたら必ずエラーに出会す場面が出てきます。
簡単に解決できるエラーもあれば、何時間、下手したら数日掛かっても解決しないそんなやる気すら失ってしまうエラーも存在します。

そういうやる気を失ってしまう時に役立つエラーに使えるかも知れないテクニックを一つ紹介します。
尚、今回はRuby on Railsで発生したエラーですが、データベース絡みのエラーだとRails問わず、どのプログラミング言語での開発環境においても効果的です。

今回は、エラー発生から3日掛かって解決しましたので、短くわかりやすくまとめてみました。

# まず、結論
この記事の概略を説明すると、
__データベースが元の異常ぽかったら、データベースを再作成した方が早いよ。__
ていう話。

では、3日間の闘いをどうぞ!

## 1日目. Template::Error
![スクリーンショット 2020-09-09 13.33.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/480

元記事を表示

DockerでRails + Vue + MySQLの環境構築をする方法【2020/09最新版】

# はじめに
フロントにVue、APIサーバにRailsという組み合わせは日本ではメジャーな構成の一つです。今回はこの構成をDockerを使って構築していきます。

この記事を読むことで、以下の構成をDocker作成出来るようになります!
API: **Rails 6系**
フロント:**Vue(TypeScript) 2系**
DB: **MySQL 5.7**

## 環境構築の流れ
1. Rails、VueのDockerfile作成
2. docker-compose.yaml作成
3. Rails、Vueのプロジェクト作成

最終的なディレクトリ構成は以下のようになります。

“`
[project_name]
├── api // Rails
│   ├── Dockerfile
│   ├── …
├── docker-compose.yaml
└── front // Vue
   ├── Dockerfile
├── …
“`

では環境構築に入っていきましょう!

# 1. ディレクトリ作成
プロジェクトディレクトリとその配下にAPI、フロン

元記事を表示

【Rails】ActionMailerを使用してSendGridのAPI経由でメール送信する場合の差出人名

## 概要
メールを送信するときに差出人名を表示させたいことがあると思います。検索すると、[Action Mailerでfromフィールドに差出人名を表示したい](http://kotaroito.hatenablog.com/entry/2016/09/23/103436)に書いている通り、fromに差出人名を文字列で入れれば反映されるのですが、SendGridのAPI経由で送る場合はこの方法では反映されないです。というわけでどうすれば良いのかというのをメモ。

## 対応
SendGridでは専用のメールアドレス設定用クラス(Email)が用意されていて、[Send sender name with email SendGrid – Rails](https://stackoverflow.com/questions/51648171/send-sender-name-with-email-sendgrid-rails)にある通り、アドレスと差出人名を設定する仕様になっています。

## 実装サンプル
ActionMailerでのSendGrid・API使用について、[Rails:

元記事を表示

【Rails】ページの上部に戻るボタン

## はじめに
・Railsを使用してアプリケーションを開発
・viewsの下部地点から上部に戻るボタンを設置する

Ruby 2.5.7
Rails 5.2.4.4

## 流れ
・“`gem ‘jquery-rails’“` を導入
・アクションを起こすボタンを用意(画像でなく文字やfont-awesome等でも代用可能)
・viewにボタンを記載しcss及びjavascriptへ追記

## ボタン画像
![top_btn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705913/7903465d-ed58-f189-fab1-45198f70b9b6.png)

適当に準備します・・・

画像ファイルをapp/assets/images配下に格納

## viewsへ追加
“`ruby



<%= image_tag asset_path('top_btn.png'), class: 'top-btn' %>

元記事を表示

[Rails][jQuery] remote:trueとjs.erbを使って非同期のいいね機能実装

#概要
Railsプロジェクトで掲示板サイトを作成中、`remote:true`と`js.erbファイル`を用いた非同期のいいね機能を実装する機会がありました。
備忘録としてここに手順を残しておきます。

#前提
Rails 5.0

`favorites_tableの作成`と`モデルのアソシエーションを定義`は既にされているものとします。

**アソシエーション:**
`users – has_many :posts, has_many :favorites`
`posts – belongs_to :user, has_many :favorites`
`favorites – belongs_to :user, belongs_to :post`

#jQueryの準備
Rails内でjQueryを使えるように準備します。
まずはgemの導入します。

“`ruby:Gemfile
gem ‘jquery-rails’
“`

ターミナルで**`bundle install`**します。
そして`application.js`に記述を追加します。

“`ruby:appli

元記事を表示

【Docker】function not implemented @ io_fread ~ というエラーの解決方法【超簡単】

##まずは解決策からいいます
####Dockerデスクトップアプリを再起動するだけ!!

これだけでした、、今までの時間はなんだったんだろう、、
Docker for Windowなら右下のクジラのアイコンを右クリックしてRestartを押せばOKです!(画像参照↓)

![スクリーンショット 2020-09-24 202325.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632678/db1d6d86-4c73-e4fb-a54a-1aaa05093621.png)
![スクリーンショット 2020-09-24 202344.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632678/21588264-e69f-8ed6-cec7-5665686bc407.png)

##エラーの経緯
githubからcloneしたRailsアプリを動かすために新たしくDocker環境を構築して色々いじっていたら、なぜか他のプロ

元記事を表示

【Rails】ドット(.)とか、コロン(:)とは一体

`::`とか、`.`とかよくお見かけします。
これはメソッドの呼び出しの違いで、表記が変わるという種明かしなんです。

#ドット記法

“`ruby:
class User
def method
puts “Hello”
end
end
“`

“`ruby:
> user = User.new

> user.method
Hello
=> nil
“`

#コロン記法

“`ruby:
class User
def method
puts “Welcome”
end
end
“`

“`ruby:
> user = User.new
> user::method
Welcome
=> nil
“`

###ドット記法とコロン記法の違い

ドット記法とコロン記法の違いは、`定数を呼び出せる`かどうか。

| 記法 | メソッドの呼び出し | 定数の呼び出し |
|:-:|:-:|:-:|
| ドット記法 | ○ | × |
| コロン記法 | ○ | ○ |

###Rubyでは、クラスやモジュールも定数として扱われる

元記事を表示

Rails6のマルチDBの自動切換(ActiveRecord::Middleware::DatabaseSelector)の実装を読んでみる

## 概要

![](https://img.shields.io/badge/rails-v6.0.3.2-)
Rails6.0より実装された複数DB対応に関して、自身のプロジェクトに適用できるか?という判断のために実装を追ってみます

## Railsガイドでの記載

https://railsguides.jp/active_record_multiple_databases.html#コネクションの自動切り替えを有効にする

> 自動切り替え機能によって、アプリケーションはHTTP verbや直近の書き込みの有無に応じてprimaryからreplica、またはreplicaからprimaryへと切り替えます。
> アプリケーションがPOST、PUT、DELETE、PATCHのいずれかのリクエストを受け取ると、自動的にprimaryに書き込みます。書き込み後に指定の時間が経過するまでは、アプリケーションはprimaryから読み出します。アプリケーションがGETリクエストやHEADリクエストを受け取ると、直近の書き込みがなければreplicaから読み出します。

H

元記事を表示

Rails ページング機能 [gem kaminari]を導入する流れについてまとめてみた。

#kaminari導入の仕方
#1.Gemfileにkaminariを追加して保存
“`rails:Gemfile
gem ‘kaminari’,’~> 1.2.1′
“`
#2.kaminariをインストールする
Gemfileに追記できましたら、以下コマンドを実行して、kaminariをインストールします。
`$ bundle install`
さらに、kaminariの設定ファイルを作成します。
以下のコマンドを実行しましょう。
`$ rails g kaminari:config`
最後に、kaminariがページャで利用するテンプレートを作成します。
以下のコマンドを実行しましょう。
`$ rails g kaminari:views default`
#3.ページャを実装する
“`Rails:app/views/books/index.html.erb
<%= @books.each do |book| %>
:
:
<% end %>
<%= paginate @books %> #このコードを追加
“`
“`Rails:a

元記事を表示

ECサイトにおけるジャンル検索(customer側)

#1. 前提条件
“`rails:app/models/genre
has_many :items
“`
“`rails:app/models/item
belongs_to :genre
“`
genreとitemは1対多の関係となっています。
#2.genreコントローラ,view, route.rbの作成
以下のコードでジャンルのコントローラとshowページを作ります。
`$ rails g controller Genres show `

以下のコードをroute.rbに記載します。

“`rails:config/route.rb
resources :genres, only: [:show]
“`

以下のコードをgenre_controllerに記載します

“`rails:app/controllers/genre_controller.rb
def show
@genres = Genre.all
@genre = Genre.find(params[:id])
end
“`

#3.showページにgenreに基づいた

元記事を表示

未経験者が自社開発企業に就職するためのREADME書き方

#はじめに
こんにちは!

先月、無事にエンジニアデビューした1年目の者です。

私は某プログラミングスクールに3ヶ月間お世話になり、卒業後、3週間で自社開発企業に転職することができました。
この経験を生かして、私が意識してきたことを伝えていければと思います。

まず、前提として転職では見せ方が最も重要だと考えています。
例えば、職務経歴書、面接対策、wantedlyのプロフィールなどなど、、
この記事では、その中でも重要なことの一つである、ポートフォリオの見せ方について共有します。

#記事の対象者
・未経験からエンジニア転職を考えていて、ポートフォリオを作成している方
・ポートフォリオのREADMEにて書く内容で迷っている方

#ポートフォリオの見せ方とは
エンジニアの方々は、忙しいので、書類選考の段階で、ソースを細かく見たりサイトを触って見たりしてくれるとは限りません。
ここで活躍するのが、READMEです。
私は、多くの転職成功された方々のREADMEを見て、自分なりの最適解を見つけました。
共通点は、端的でわかりやすく、視覚的に訴えていることでした。
この共通点からREADM

元記事を表示

railsのいいね機能の変数エラーについて

### 前提・実現したいこと

railsを使ってwebアプリケーションを作成中です。
自分がいいねをつけた投稿を全投稿の中からソートして画面に表示したいです。
しかし、postの部分にエラーが出てしまいました。
その実

### 発生している問題・エラーメッセージ

“`
Showing C:/Users/user/dome/app/views/users/likesline.html.erb where line #26 raised:

undefined method `id’ for nil:NilClass
“`
“`
<% post = Post.find_by(id: like.post_id) %>

<%# ここから=========%>
<%= link_to("/posts/#{post.id}") do %>
<%# ここまで=========%>

元記事を表示

Catalinaにアップグレード後のbundle installでエラー

## エラー内容
“`zsh
$ bundle install
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

(省略)

An error occurred while installing ffi (1.13.0), and Bundler cannot continue.
Make sure that `gem install ffi -v ‘1.13.0’` succeeds before bundling.

In Gemfile:
guard-rspec was resolved to 4.7.3, which depends on
guard was resolved to 2.16.2, which depends on
listen was resolved to 3.2.1, which depends on
rb-inotify was resolved to 0.10.1, which depends on
ffi

元記事を表示

(Ruby on Rails6) 投稿内容を編集する機能を作る

#まえがき
こちらでは、投稿ページ制作後を前提に”投稿内容を編集”の作業を忘却録として残します。

#投稿内容を編集する機能を作る

##編集ページの作成
routes・controllers・view の3点に、編集ページを新規作成してください
また、ページ作成には

・コントローラー名→ form
・アクション名→ Edit

で設定してます。

(例)

“`rb:config/routes
Rails.application.routes.draw do
get ‘/’ => ‘form#index’
get ‘/form’ => ‘form#form’
post “form/create” => “form#create”
get “form/:id/edit” => “form#edit” ⇦これ
get “form/:id” => “form#post”
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.h

元記事を表示

OTHERカテゴリの最新記事