Rails関連のことを調べてみた2021年08月17日

Rails関連のことを調べてみた2021年08月17日
目次

deviseの導入

##gemfileにdeviseを追加

“`gemfile
gem ‘devise’
“`

##bundleをインストール
“`
$ docker-compose run web bundle install
“`

gemfileが変更されたので、buildする

“`
$ docker-compose build
“`

##deviseをインストール
“`
$ docker-compose run web rails g devise:install
“`

##モデルの作成
“`
docker-compose run web rails g devise モデル名
“`

##アラートの表示
bodyタグ内に

“`application.html.erb

<%= notice %>

<%= alert %>

<%= yield %>

“`

##deviseのビューの作成
“`
docker-co

元記事を表示

【メモ】bin/rails db:drop実行に失敗した時の対処法

## 症状

ターミナルで**$ bin/rails db:drop**コマンドを入力したら以下のような画面が表示された

“`terminal:terminal

PG::ObjectInUse: ERROR: database “XXXxxxx” is being accessed by other users
DETAIL: There are 3 other sessions using the database.

rails aborted!
ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: database “XXXxxxx” is being accessed by other users
DETAIL: There are 3 other sessions using the database.

“`

## 対処

原因は作成中のアプリ以外に接続しているアプリなどはないのに接続されっぱなしになっている模様。
DBの再起動で回復に成功。
DBを再起動すると他のDBを使用しているアプリまで切

元記事を表示

ruby on railsでのユーザー管理機能について

この記事ではruby on rails 6.0.0を使用しています。!

今回はdeviseのgemを紹介したいと思います。

deviseって何?

devisとはユーザー管理機能を実装するためのgemです。
会員登録やログイン・ログアウト機能を簡易に実装することができるgemです。!

導入方法

導入は簡単です。!

![05ca375321ad0851c0be9c6b3a07691b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1902434/e791767e-878d-e529-cc2d-c73d9f4d8fab.png)

Gemfileに gem ‘devise’ と記述してbundle installをするだけです。!!

元記事を表示

【Ruby on Rails】新規登録時のエラーメッセージ発生後にリロードするとルーティングエラーになる問題を解決した話

#解決したい課題

* 新規会員登録時に、エラーメッセージ表示後に、リロードすると発生するRunningErrorを解決したい

#結論

* [GET]/userを呼び出していたので、そのまま入力する

#原因と対策
###1.エラー文

![スクリーンショット 2021-08-17 8.40.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/6c8a0029-314c-1447-0b3c-ab116be75de3.png)

###2.rails routesルーティング確認

![スクリーンショット 2021-08-16 21.41.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/47f20649-a8ae-9aad-1232-c1f9586a167b.png)

そもそもGETがない、、、!

###3.routes.rbに記載

resourcesを使っていたのでi

元記事を表示

Railsチュートリアルmodule SessionsHelperを例にmoduleとHelperの役割を見てみる

Railsチュートリアルも9章に入ったのですが、Sessionが出てきてからかなり難易度が上がったように感じたので、知識の定着を図ることも兼ねて、理解が曖昧な部分を自分用にまとめておきます。

##module SessionsHelperとは

Sessionコントローラーを生成した時点で、自動的にmodule SessionsHelperも生まれてました。

まず、**module**というのはclassと同様に部品の集まりです。以下の説明がわかりやすいと思います。

>Rubyにはオブジェクト指向で一般的なクラス以外にも、モジュールという概念が存在します。モジュールではクラスと同じように定数やメソッドをまとめたり、クラスに組み込んで多重継承を実現したり、クラスなどをまとめることで名前空間を提供するなど、いろいろな使い方ができます。 https://qiita.com/shiopon01/items/fd6803f792398c5219cd

ちなみにクラスとモジュールの違いに関する説明は[こちら](https://qiita.com/fukumone/items/2dd4d2d1

元記事を表示

railsチュートリアル 第3章 テスト駆動

##テストから始める
 自動化テストを作成して、機能が正しく実装されたことを確認する習慣をつける。
 アプリケーションを開発しながらテストスイート(Test Suite) をみっちり作成しておけば、いざというときのセーフティネットにもなる。
 テストを作成するということは、その分コードを余分に書くことになりますが、正しく行えば、むしろテストがないときよりも確実に開発速度がアップします。
 コントローラテスト、モデルテスト、統合テストの3つの種類がある。
 統合テストは、とりあえず強いらしい。
(ユーザーがWebブラウザでアプリケーションとやりとりする操作をシミュレートできるので特に強力です。)

###最初のテスト
genelateで自動生成された static_pages_controller_test.rb を見てみる。

“`rb
require ‘test_helper’

class StaticPagesControllerTest < ActionDispatch::IntegrationTest test "should get home" do get

元記事を表示

Rails6でデータベースを変更する (sqlite3→MySQL)

#rails db:system:change –to= を知る

前回の記事でデータベースを変更する為、database.ymlを書き換えたりしましたが、Rails6ではrails db:system:change –to=というコマンドで一瞬で変更できました。

“`
$ bin/rails db:system:change –to=mysql
conflict config/database.yml
Overwrite /Users/ユーザー名/アプリ名/config/database.yml? (enter “h” for help) [Ynaqdhm] Y
force config/database.yml
gsub Gemfile
gsub Gemfile
“`

database.ymlを確認すると書き換わってます!

![スクリーンショット 2021-08-16 23.40.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

Railsでデータベースを設定する(MySQL)*メモVer.

railsでデータベースを設定する方法

MySQL接続用アカウント作成 → アカウントに権限を付与 → database.ymlの編集 → データベースの作成 → サーバー起動

Railsのバージョンは

“`
~ % rails -v
Rails 5.2.6

~ % bundle -v
Bundler version 1.17.2
“`

今回は、myappディレクトリを作成し、その中でapiアプリケーションを作成しています。

“`
~ % cd myapp

myapp % rails new api –database=mysql –skip-bundle –api

myapp % cd api

api % bundle install
“`

###MySQL接続用アカウント作成

“`
api % mysql -u root -p
“`

パスワードを入力

“`
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL

元記事を表示

Railsのデータベースを後から変更(SQLite3→MySQL)

#はじめに
Rails newコマンドで新規アプリを作成するときにデータベースを指定すればよかったのですが、何も考えず実行してしまったので、後から変更したいと思います。

またMySQLとmysql2の違いについて調べたところ、mysql2の方がMySQLより高速でよく使われるそうなので、mysql2に変更します。

☆Rails6ではrails db:system:change –to= で簡単に変更できました。

#開発中(開発後)にMySQLへ変更する流れ
1. Gemfileを変更
2. database.ymlを変更

#1. Gemfileを変更

GemfileのSQLiteをコメントアウトしてMySQLを追記しました。

![スクリーンショット 2021-08-15 18.22.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1870355/fdd48413-4362-68da-bf74-656d2e892670.png)

bundle installを実行します。

元記事を表示

【Rails】どうしてもjoinsできなかったので、苦肉の策で無理矢理joinsさせた

joinsをどうしてもしたかった

userとfoodとorderという三つのDBテーブルのうち、foodとorderをjoinsさせて、フロントに持っていきたかったのですが、どうしても二つのテーブルのデータが同時に取得できなかったため、無理矢理joinsさせた愚行をここに記していきます。

念のため、モデルの関係性は以下です。
foodとorderは1対nの関係です。

“`user.rb
has_many :foods
has_many :orders
“`

“`food.rb
belongs_to :user
has_many :orders,foreign_key:”id”,primary_key: “id”
“`

“`order.rb
belongs_to :make_user,class_name: “User”, optional: true
belongs_to :order_user,class_name: “User”, optional: true
belongs_to :food, foreign_key:”food_id”,opt

元記事を表示

[Ruby on rails]タグ付け機能④タグにユーザー情報紐付け マイページで投稿に紐付けたタグを表示

初めに

今回は、タグにユーザー情報を紐付けて、
マイページでそのユーザーが投稿に紐づけたタグを表示するようにします。

これまでの記事

https://qiita.com/ki_87/items/a344ea566c88b10b950c

https://qiita.com/ki_87/items/ae5d44af096df01ca587

https://qiita.com/ki_87/items/b7ceded18d473dc22f8f

完成イメージ

以下はマイページの一部です。

![スクリーンショット 2021-08-16 21.07.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/86acb053-6827-f36d-5a78-8e0b0c2902c0.png)

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

中間テーブルに外部キー追加します。
t.references :user, foreign_key: t

元記事を表示

【Heroku】デプロイ→ページが表示されない→親子関係のテーブルが実行されていなかった→親から実行して解決

# 目次

1. エラー内容
1. 原因
1. 解決方法
1. 解決に至るまでの過程
1. 参照

# エラー内容

herokuにデプロイして本番環境で動作確認しようとしたところ、トップページが表示されずエラー画面が表示された。

ここまでの操作は下記の通り。

1. “` git push heroku master “`コマンドで変更点をherokuにpush
2. “`heroku run rails db:migrate“`コマンドでheroku上でマイグレーションを実行
3. 本番環境で動作確認しようとしたら下記エラー画面が表示された

[![Image from Gyazo](https://i.gyazo.com/6ac3ef0ac41b077701a9055adeeb651c.png)](https://gyazo.com/6ac3ef0ac41b077701a9055adeeb651c)

# 原因

最終的に辿り着いた原因は、親子関係のテーブルを子の方から実行しようとしていた為だった。

“`terminal
% heroku run rail

元記事を表示

[Ruby on rails]タグ付け機能③投稿編集時のタグの編集と削除 (with 記事の下書き保存)

初めに

②までの実装だと、投稿編集時にタグの数を減らしたりすると、
エラーが出るかと思います。

https://qiita.com/ki_87/items/a344ea566c88b10b950c

https://qiita.com/ki_87/items/ae5d44af096df01ca587

コードについて

③の記事から、投稿の下書き機能も導入しているため、
少しコードが見にくくなっています。
下書き機能については、以下の記事で説明しています。

https://qiita.com/ki_87/items/3e2d570e3ee3710ff506

下書き保存ではタグの保存はしないようにしたいので、以下のコードでは、
if params[:post][:status]== “公開”か、そうじゃないか(下書き)で、
条件分岐しています。

コントローラー

“`perl:post_controller.rb
def update
# postのid持ってくる
@post = Post.find(param

元記事を表示

[Ruby on rails] 通知機能実装 コメント(非同期通信)の通知機能

初めに

今回、コメントの通知機能を実装しました。

参考記事はいくつかあるものの、私の場合、コメントもいいねは非同期通信にしてるため、
実装過程で、非同期通信が動かなくなったり、、なかなか大変でした。

「どの記事見ても何かしらのエラーが出る」という記事も見かけましたので、
あくまでも参考にして頂ければ…と思います。

完成イメージ

コメントしてくれた人&どの投稿にコメントしてくれたかがわかるようになっています。
名前も、記事名もリンクになっていますので、飛べます。
全削除で、全部の通知が消えます。
自分の記事に自分でコメントしても、通知はきません。
![スクリーンショット 2021-08-16 17.58.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/785a7ed0-184a-0d5c-a736-4deecc81e947.png)

未読の通知があれば、NOTICEが赤いベルになります。既読したら、色は黒に戻ります。
![スクリーンシ

元記事を表示

ファイルの有無を確認する単体テストについて

商品出品機能の単体テストを行った際に以下のようなメッセージが表示された。

*ActiveSupport::MessageVerifier::InvalidSignature*

調べてみるとFactoryBotでimageの情報をFakerを用いて用意していたことが誤りだったようだった。
※型(stringやintegerなど)の違いによるもの

下記のようにimageファイルを用意したところ事象は解決した。

“`ruby
after(:build) do |item|
item.image.attach(io: File.open(‘public/images/test.png’), filename: ‘test_image.png’)
end
“`

元記事を表示

Rails apiモード構築時にBundleがインストールできないエラー&解決方法(db:MySQL)

Rails apiモードの構築時、Bundleがインストールできないエラーが発生しました。
解決に至った方法をメモも兼ねて記述しておきます。
当方初学者なので、気になるところや、こうした方が良かった等のご意見も頂ければ嬉しいです!

Railsのバージョンは

“`
~ % rails -v
Rails 5.2.6

~ % bundle -v
Bundler version 1.17.2
“`

###エラー内容
(コマンド中の「%」などは人によって異なると思います。)

“`
~ % cd myapp

myapp % rails new api –database=mysql –skip-bundle –api
create
create README.md
create Rakefile
create .ruby-version
create config.ru
create .gitignore
create Gemfile
run git i

元記事を表示

~part4~【FC版】React + Rails API + axios + react-router-domでCRUDを実装する

こんにちは!スージです。
[こちら](https://qiita.com/suzy1031/items/ab1186dc3ae48be27e5a)の記事の続きです

### やりたい事

– `Userモデル`と`Postモデル`を1対多で関連付け
– ユーザーが登録した投稿を一覧画面に表示
– 新規登録した時に`user_id`を保存
– ログイン中のユーザーは自分が投稿したデータのみ`更新`・`削除`ができる

### 開発環境
Ruby 2.7.2
Rails 6.1.4
MySQL
node.js 16.6.2
React 17.0.2

### 参考
[Rails deviseで使えるようになるヘルパーメソッド一覧](https://qiita.com/tobita0000/items/866de191635e6d74e392)

### Rails側から実装開始

まず、postテーブルに外部キー`user_id`を追加します

“`terminal
backend $ rails g migration AddColumnsToPosts
“`

“`ruby
#

元記事を表示

【Ruby on Rails】Topに戻るボタンの作成方法

#対象者

* 画面にTopに移動するボタンを作成したい方

#目的

* 下にスクロールしてもすぐに画面の一番上に移動できるようにする

#実際の手順と実例
###1.画像の用意

まず画像を準備します。

何でも大丈夫ですが、下記のファイルを使用して頂いて大丈夫です。

![arrow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/ff3906c7-ea0e-e9df-3bcd-ecc9cd0f157e.png)

こちらの画像を
app/assets/imagesに格納します。

###2.Viewの設定

今回はすべてのページで表示したいので
application.html.erbへ記載します。

“`app/views/layout/application.html.erb

<%= yield %>


<%= image_tag asset_path('arrow.png

元記事を表示

トップへ戻るボタンを作る方法(JQuery ー> Vue.js)

はじめに

今回は既存のRailsアプリBlogのjQueryを利用して実装していたところを、Vue.jsで実装していきます。

jQuery

“`app/javascript/post/page_top.js
// jQuery

$(document).on(“ready turbolinks:load”, function() {
const pagetop = $(“#page_icon”);

pagetop.hide();
$(window).on(“scroll”, function(){
if ($(this).scrollTop() > 100){
pagetop.fadeIn();
}else{
pagetop.fadeOut();
}
});

pagetop.on(“click”, function(){
$(“body, html”).animate({scrollTop: 0}, 30);
return false;

});

});

`

元記事を表示

[個人開発]Discordの使用時間を計測するアプリ 「Discord-Log」を作りました

## はじめに
この度、Discordのボイスチャンネルの使用時間を自動で計測するアプリ**「Discord-Log」**をリリースしました。
このアプリは、[RUNTEQ](https://runteq.jp/)というプログラミングスクール内限定でリリースしているアプリになりますので、サービスリンクは載せていません。
ご了承ください。
####Discord-Log####
![top3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625435/51f53738-2397-aa95-258b-c02a3bb8aa11.png)

## このサービスを作った背景
結論からお伝えすると、私がDiscordの**ボイスチャンネルにいる時間=学習時間**であったため、簡単にその時間を計測できるサービスが欲しいなと感じたからです。
私自身、学習時間を計測する習慣はありませんでしたが、学習するときはDiscordを使うようにしていました。
そのため、**Discordのボイスチャンネルを使用した時間を計測できれ

元記事を表示

OTHERカテゴリの最新記事