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

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

【Rails+MySQL】MySQLのIDを1から振り直す

MySQLを使用してアプリ作成していると、テストデータを追加したり消したりしてIDがぽこぽこ抜けちゃうことが多いと思います。

IDをもう一度1から振り直してデータを綺麗に整えたい時に以下の方法を使うと楽だったので共有できたらと思います。

#アプリのデータベースの確認
MySQLに入って以下のコマンドを打ちます。

“`
> use app_name_development;
“`
Railsで作ったテーブルが保存されてるデータベースです。

#Idを1から振り直す
「delete from テーブル名」でテーブルのデータを消してから以下を実行

“`
ALTER TABLE `テーブル名` auto_increment = 1;
“`

これで中身が綺麗に振り直されてるのではないでしょうか?

#まとめ
テストデータ管理はなんだかんだ大変なので参考になれば幸いです。

元記事を表示

Rails6 each を使った時にDBのレコードの内容が全て出力されてしまう

# 目的

– eachを用いた時に意図しない出力になってしまったので解決方法を記載する。

# 症状

– 下記のコードを用いてDBのとあるテーブルのレコードの内容を出力したところレコードの全ての内容が最後に出力されてしまう。

“`html
<%= @posts.each do |post| %>
<%= post.content %>
<%= post.link %>
<% end %>
“`
↓出力

“`
testでーす
https://qiita.com/miriwo
[#]
“`

# 原因

– 単純なミス
– `@posts.each do |post|`の部分を<%

元記事を表示

RailsにReactやVueはいらない? ajaxでviewを非同期で操作するgem(ActionPartial)を作りました。

# ActionPartial

個人で**[Crover(クリエイターズプラットフォーム)](https://crover.me)**というサービスを企画&開発&運営している**[nir](https://twitter.com/nir_searchright)**と申します。

**[Crover](https://crover.me)**の開発で動的な`view`の実装が必要になったので、`gem`を作ることにしました。

それで出来上がったのが、`Rails`で動的な`view`を簡単に実現できる`gem`の`ActionPartial`です。

Crover(クリエイターズプラットフォーム)
→ https://crover.me

github(ActionPartial)
→ https://github.com/nir-searchright/actionpartial

なぜ、`React`や`Vue`を使わなかったかというと
– 学習コストが高い
– フレームワークにフレームワークを組み込むことに違和感がある
– 設計思想的な問題(`Rails`を`Rails`のま

元記事を表示

Docker Compose と Simpacker で、モダンな Rails 開発環境を構築する

# 想定読者
* Rails のフロントエンド開発に webpack を利用している(利用しようとしている)
* Rails/webpack 自体の設定については、本記事では必要最低限しか記載しません
* ※ webpacker gem 経由で webpack を利用されている場合
* →本記事では webpacker は利用しません。webpack 自体の設定を直接書くことになります。
* Rails 実行用のコンテナと webpack 実行用のコンテナを分離したい&それぞれのコンテナサイズを小さくしたい
* コンテナの再ビルド時間を減らしたい
* Node.js に依存する処理が Rails コード内に存在しないことを簡単に検知したい
* ただの趣味
* etc.

# 環境
* Ruby >= 2.5.1 (for Rails 6)
* with Bundler
* Node.js >= 12.x
* with Yarn
* Docker
* with Docker Compose

※ 一部

元記事を表示

【環境構築】Rails6 + Vue.jsで hello_vue.jsの名前をmain.jsに変更したいときの手順

## はじめに
先日、こちらの記事を書きました。
[【環境構築】Docker + Rails6 + Vue.js + Vuetifyの環境構築手順 – Qiita](https://qiita.com/terufumi1122/items/237b5465e11b26297bde)

そこで自動生成される、`app/javascript/hello_vue.js`の名前を`main.js`に**変更したい方**のために手順を記載しておきます。(対象が狭い!笑)

## 環境
“`yaml
OS: macOS Catalina 10.15.3
Ruby: 2.6.5
Rails: 6.0.2.1
Docker: 19.03.5
docker-compose: 1.24.1
Vue: 2.6.10
vuetify: 2.1.0
“`
## 前提
[こちらの記事](https://qiita.com/terufumi1122/items/237b5465e11b26297bde)に沿って環境構築が完了したとします。

## 1.ファイル名を変更

`app/javascript/pack

元記事を表示

自動デプロイ後ローカルでいろいろ変更してデプロイしたらmigrationとunicornで詰まりデプロイできなかったので解決までの備忘録

#自動デプロイでかなり詰まったので備忘録として残します。

– 初学者のため理解が不足しているところがあり、解決の過程で必要のない工程をしている可能性がありますがご了承ください。

# エラー過程①

– 自動デプロイ完了後ローカルでデータベース構成などを変更
– 変更後自動デプロイ実行する。
– 途中でmigrationの実行で止る。

# 解決までの流れ①

– 原因の仮説としてはローカルでデータベースのテーブルやカラムの変更を行いrails db:migrate:resetを行ったためだと仮定し本番のデータベースもリセットすることにした。

– 関連の記事を探し、こちらで書かれているコードを参照、一度データベースを消してしまうという方法を取ってみたhttps://qiita.com/wacker8818/items/72d933f036ca0b75d124

– 無事データベースは削除され、改めてデータベースの作成とマイグレーションを実行したが落とし穴に会う。
– ローカルに戻りアプリケーションのディレクトリで、自動デプロイを実行したがまたもマイグレーションの実行部

元記事を表示

FactoryBotでtraitを使おう

#はじめに
`FactoryBot`でテストデータを作成するに当たって`trait`は必須知識です。
ただこのtraitは有名な技術書である**「現場Rails」**には載っていなく、RSpecを今から始めるという方の中では知らない人も多いのではないでしょうか(**Everyday Rails**には載っているみたい)

`trait`を知らないと作成したいデータを上手く作成できないのでRSpecをこれから始めるよって方や`trait`を知らない方向けにこの記事を書きます。
*FactoryBotの導入はhttps://qiita.com/ShotaroHirose59/items/db39e56829cbf6b47b19

##traitを使ってみる

一例としてTaskのファクトリを作成する際に`trait`を使ってみます

“`ruby
# spec/factories/tasks.rb
FactoryBot.define do
factory :task do
title { ‘Task’ }
status { :todo }
from = Da

元記事を表示

[Ruby on Rails] includesメソッドの書き方まとめ

# 実務でまさかのincludesメソッドに戸惑う
「この画面の情報をスプレッドシートに出力しておいて」

「はーい」
(データを取ってくるだけなら余裕だろ、、、)

(あれ、関連するモデル多すぎじゃね?)

(関連するモデルに関連するモデルも取得、、あれ、、頭が、、、)

って感じで整理できていない部分がありましたので、今回まとめておきます。

# 前提
– モデルの関連付けだけをテーマに書きます。
– includesする際、単数形か複数形かはアソシエーションによって判断します。
– N+1問題を解決するためにincludesします。( [参考記事](https://www.sejuku.net/blog/26168) )

# 今回例示するモデル
– Tweets:ツイート
– Users:ユーザー
– Comments:ツイートに対するコメント
– Tags:ツイートにつけるタグ
– Addresses:ユーザーの住む住所

ここでは便宜上、関連するモデルを子モデル、子モデルに関連するモデルを孫モデルと呼ぶことにします。

## ① 子モデルが1つの場合

“`
Tweet.

元記事を表示

Rails6 DBにsaveする時にROLLBACKしてしまい原因がわからない時

# 目的

– DBにsaveする際にROLLBACKしているときのエラーの表示方法をまとめる

# 実施方法

– saveの命令の後ろに`!`をつけてあげるとエラー文が表示される。

# 具体的な例

– `@user.save`をただ実行しただけの時

“`ruby
User Exists? (0.5ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` =
BINARY ‘miriwo.rails@gmail.com’ LIMIT 1
(0.2ms) ROLLBACK
=> false
“`

– `@user.save!`を実行した時

“`ruby
User Exists? (0.5ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` =
BINARY ‘miriwo.rails@gmail.com’ LIMIT 1
(0.2ms) ROLLBACK
Trace

元記事を表示

【rails】credentials.yml.encについて

#はじめに
初学者がポートフォリオ作成でハマったことをメモします。
AWSにデプロイする際credentials.yml.encでハマったので箇条書きでメモしておきます。

##credentials.yml.encについて
・秘密情報を保持するためのファイル。
・configディレクトリに作成される。
・rails newで作られる。
・暗号化されておりgithubで管理出来る。
・復号化する為には同じくrails newで作成されるconfig/master.keyを使う。
・master.keyを削除してしまった場合はcredentials.yml.envを削除した後`sudo EDITOR=vim rails credentials:edit`で新しいcredentials.yml.envとmaster.keyを作成する。
・リポジトリーをcloneした場合master.keyはコピーされていない為、master.keyをコピぺする必要がある。
・直接エディタから編集する事ができない。vimを使って編集可能。 `$ EDITOR=vim bin/rails credentia

元記事を表示

rails内の環境構築 その2

# scaffoldでサンプルアプリを作る

“`
docker-compose run web rails g scaffold user name:string address:string age:integer
“`

そして

“`
docker-compose run web rails db:migrate
“`

ブラウザでlocalhost:3000/usersでアクセスできますが、毎回めんどいのでrootに指定します

“`confing/routes.rb
Rails.application.routes.draw do
resources :users
root ‘users#index’
end
“`

# slimを導入

“`Gemfile
gem ‘slim-rails’
gem ‘html2slim’
“`

そして

“`
docker-compose run web bundle install

“`
さらに

“`
docker-compose build
“`

既存の`erbファイルをslim可する`

`

元記事を表示

Railsで個別にCSSを適用させる方法

#結論
config/initializers/assets.rbに
‘Rails.application.config.assets.precompile += %w( user.css )’
を追加することで解決した。
いろいろ調べてもわからなかったが、エラーが出たときの指示に従ったら解決したので、赤い文字がたくさん出てきても焦らずに対処すれば問題ないということがわかった。

#背景
htmlやcssの勉強は対してしていなかったものあり、デザインをいじることに抵抗があった。
そんなとき、Bootstrapが便利だと職場のエンジニアの方々からきき、デザインに全く手が回っていないサービスにBootstrapの実装を試みた。

Bootstrapをいろいろ探していると無料のテーマというのがあることを知った。
元々ワードプレスでブログを書いていたことがあったので、ワードプレスのテーマと非常に似ているなと感じた。

Bootstrapのテーマを探すとサイト丸ごとをデザインできるようなものもあったが、Bootstrapについてよくわからないし、せっかく実装したslickを使ったJQuery

元記事を表示

Rails チュートリアル11章で躓いたポイント(未解決)

# はじめまして

私は現在、職業訓練校で主にJava,C言語を学んでいますが、独学でRailsを学習中です。

今回は、タイトル通りRailsチュートリアルにて躓いたポイントを投稿しようと思います。

※2/11現在 問題は解決していません。

# 11章 本番環境でメールが送信できない!

[11章リンク](https://railstutorial.jp/chapters/account_activation?version=5.1#cha-account_activation)

development環境におけるアカウント有効化はおそらく進みテストもエラーなくクリアすることができました。

11.4 本番環境でのメール送信の項で問題が発生しました。

## リスト11.41: Railsのproduction環境でSendGridを使う設定
~~~ruby
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
host = ‘<

元記事を表示

DockerでRailsの環境構築

docker-composeでrails環境を構築します。データベースはpostgresqlを使用します。

## Setup
以下のような構成からスタートします。

“`
./
|- docker-compose.yml
|- rails-app/
|- Dockerfile
“`

### Dockerfileの作成

“`dockerfile:Dockerfile
FROM ruby:2.5.0

RUN apt-get update && apt-get install -y build-essential libpq-dev postgresql-client vim less
RUN gem install rails -v ‘5.2.1’
RUN mkdir /app
WORKDIR /app
“`

railsのバージョンは5.2.1を指定しています。
マウント先のディレクトリとしてappディレクトリを作成しておきます。

### docker-compose.ymlの作成

“`docker-compose.yml
version: “3”

serv

元記事を表示

rails migrate時にIncorrect table name

railsでcreateTableしたら以下の様なエラーが出ました。
#エラー文
“`
Mysql2::Error: Incorrect table name ‘books ‘:
“`
#エラー箇所
“`ruby
create_table “books “, options: “ENGINE=InnoDB DEFAULT CHARSET=utf8mb4” do |t|
t.string “title”, null: false
t.string “author”, null: false
t.boolean “is_read”, null: false
t.datetime “discarded_at”
end
“`
#原因
テーブル名の後ろにスペースが入ってました・・・

“`ruby
create_table “books ”
“`

普通に気づけそうなのですが、エラーが`mysql2・・・`と表示されていたため
特定に若干時間が掛かってしまいました。

元記事を表示

【Rails】error prohibited this user from being saved:のエラーメッセージがi18nで日本語化されない

#日本語化されない
下記のURLをもとにエラーメッセージを作成。
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
template:
body: 次の項目を確認してください
header:
one: “%{modelにエラーが発生しました”
other: “%{model}に%{count}個のエラーが発生しました

しかしerror prohibited this user from being saved:のエラーメッセージだけが日本語化されない。

3fa1148b8a5369418ce366ab9e0515a3.png

#結論
エラーメッセージ部分を下記のように変更する。
` <%= t("errors.te

元記事を表示

MacBookの環境 mysql5.6からmysql8.0に更新

## やったこと

どこかで、rails6 色々変わりすぎてヤバイ!笑
っていう話を耳にして、そういえば開発環境に関してはスクールから言われるままに特定のバージョンを入れただけだな〜と思い確認すると案の定、古い安定バージョンを入れていた。自分は金がかからない限りは無駄に冒険してしまうところがあるので、Rails、Ruby、Mysqlをバージョンアップさせようと思いついてしまった。

ちなみにちなみに、自分は少数派のキチンとバックアップタイプですが、timemachineで外付けHDDにバックアップがある為、いつでも戻れる!という安心感の中でやりました。

## 新旧バージョン

|app|旧|新|
|—|—|—|
|Ruby|2.5.1|2.6.5|
|Rails|5.2.3|6.0.2.1|
|Mysql|5.6|8.0|

※Rubyに関しては、最新2.7.0にしてしまうと、対応しているgemが少なくなってしまう為開発に甚大なダメージが・・・ということで、その前のバージョンで我慢しておく事にした。

## RubyとRails

Homebrewをアップデートして、

元記事を表示

無限スクロールと逆スクロール機能の実装(jQuery&kaminari)

# 0. これは何?
LINEライクなチャットアプリ作成の一端。
一部jQueryのライブラリやRailsのgem kaminariを使用。

1. 無限スクロールの実装
2. 逆スクロールの実装

に分けて解説。

# 1. 無限スクロールの実装

## 完成形ソースコード
####**js側**
“`infinite_scroll.js
$(document).on(“turbolinks:load”, function() {
if ($(“nav.pagination a[rel=next]”).length){
$(“.user_list”).infiniteScroll({
path: “nav.pagination a[rel=next]”,
append: “.user_list ul”,
elementScroll: true,
history: true,
prefill: false,
status: “.page-load-status”,
hideNav: “.

元記事を表示

bundle execって必要なの?

`rails s`って書いても、`bundle exec rails s`って書いても同じ動きをするように見えるんですが、何が違うのでしょうか。気になったので調べてみました。

##結論
– `bundle exec`をつけないと、PCにグローバルインストールされているgemが動く
– `bundle exec`をつけると、そのプロジェクトで管理しているgemが動く
– `bundle exec rails`と`bin/rails`は同じ動きをする

##そもそもBundlerとは
– プロジェクト内で使うGemのパッケージ管理ツール。Gemをプロジェクト単位で管理することができる。
– rbenv(rubyのバージョンをプロジェクト単位で管理するツール)のGem版
– `bundle install`コマンドを叩くと、Gemfileに記載されたGemをインストールする

##bundle installした時のGemの保存先
rbenvを使っている場合

“`terminal
$ gem which byebug
/Users/***/.rbenv/versions/2.6.5/l

元記事を表示

【Rails】bundle exec rails db:seedを行って「localhost でリダイレクトが繰り返し行われました。」が出た時の対処法

#エラー発生
db/seeds.rbの中身の変更を行い、`bundle exec rails db:seed`を行ったところ、「localhost でリダイレクトが繰り返し行われました。」のエラーが発生した。

ログは下記の通り。

“`
Started GET “/login” for ::1 at 2020-02-11 15:40:29 +0900
Processing by UserSessionsController#new as HTML
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 13 LIMIT 1
↳ vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98
Redirected to http://localhost:3000/login
Filter chain halted as :require_login rendered or redi

元記事を表示

OTHERカテゴリの最新記事