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

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

【Rails】Refileでの保存先をS3にする

## 開発環境

Ruby 2.5.7
Rails 5.2.3

※今回、デプロイについての説明は割愛します。
※AWSのアカウントを持っている前提で話を進めていきます。
※Refileは導入済み

## IAMでユーザーの追加
サービスからIAMを選択し、ユーザーを選択するとユーザーを追加することができます。
`プログラムによるアクセス`にチェックをいれてください。
![スクリーンショット 2020-05-12 2.48.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456939/e5096027-8172-12e2-453e-cc4fa95fcaf3.png)
既存のポリシーを直接アタッチから`AmazonS3FullAcccess`にチェックを入れます。
アクセスキーIDとシークレットアクセスキーは忘れないようにメモをするかcsvでダウンロードしておきましょう。

ユーザーの追加後、そのユーザー名を選択したら↓のような画面が出てきます。
そこの認証情報からコンソールのパスワードを設定しまし

元記事を表示

CentOS8にRails6のDevelop環境を構築する

手元のPCで動かすことはできたけど、モバイル端末での表示を試したかったり、チーム内で使用感を共有したい場合などに、ちょっとした仮想環境でRailsが動く環境が欲しくなったので作ってみました。

# 超忙しい人向け
「とりあえずバージョン等は気にしないから、手軽に動けばいい」という方向けの手順はこちら。
イントラでの利用を想定しています。事前作業として、

– CentOS8のインストール(最小限のインストール)
– プライベートのIPアドレス割当(下記では192.168.0.100)
– SELinuxやfirewalldは無効化

を行っている前提です。

“`
curl –silent –location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
dnf install -y git gcc gcc-c++ openssl-de

元記事を表示

RailsのViewでActiveRecordな大量データを出したら…めっちゃ遅!高速化した話

# 結論
– ある特定ユーザだけ段違いにレコードを持っていて、全部のレコードを表示する画面を実装したら無事死亡
– ActiveRecordで取得したオブジェクトがすごく巨大だった
– `ActiveRecord::QueryMethods.select`で劇的に早くなった!
– あくまで特殊の場合だと思うから、銀の弾丸ではないよ

## めっちゃ遅くて使いものにならない
特定ユーザ様だけ大量のレコードを持っていました
問題はそこではなく、あるオペレーションの確認画面を作ったときにその影響ある全てのレコードを表示させたかったので、全レコードを表示しようとしたらすごく遅くなってしまいました

ページネーションを実装する程でもないと考え、ローカル環境なのでデータも少ないため「よさそう」「ヨシッ」という気分で使ってもらったら…ゴメンナサイゴメンナサイ

## どうしようどうしよう
実際のページを見てみたらページを表示しきるのに何十秒とかかっていました
なんで遅いんでしょうか…

– 大量のDOMを表示しきるのに時間がかかっている?
– 発行しているSQLクエリが遅い?

そういえば、メモリ

元記事を表示

【超初心者用】RubyでBINGOカードを作る手順を丁寧すぎるぐらいに書いてみた(2)

#はじめに

“`
B | I | N | G | O
8 | 16 | 36 | 57 | 67
10 | 24 | 33 | 58 | 72
2 | 17 | | 51 | 69
7 | 18 | 45 | 59 | 62
4 | 21 | 37 | 53 | 71
“`

今回は(2)で[前回の記事](https://qiita.com/baby-0105/items/fd717a05e435c656ccc3)に続き、[CodeIQに「ビンゴカード作成問題」を出題しました。みなさんの挑戦をお待ちしてます!](https://blog.jnito.com/entry/2015/02/09/101018)を参考にRubyでBINGOカードを作るを作ってみようと思いました。

しかしですね、インプットしかしてなかった人にはBINGOカードと言えど、これをアウトプットするのは多少なりとも苦戦するのではないでしょうか?

今回は、自分なりに順を追ってどのように作成していったかを記載していきます。
本当に、超初心者用にめちゃくちゃ丁寧に手順を記しています。

『そ

元記事を表示

マイグレーションファイルを作成してDBに反映させる

【開発環境】
macOS Catalina
バージョン 10.15.3
ruby 2.5.1
Rails 5.2.4.2
visual studio code
#マイグレーションファイルを作成してDBに反映させる
マイグレーションについてまとめました。

##マイグレーションファイルとは
マイグレーションファイルは、簡潔にいうとDBの設計図です。
一旦マイグレーションファイルに設計を書いて、それをDBに反映させることで、テーブル、カラムを作成できます。

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

“`
$ rails g migrate マイグレーション名
“`
こちらのコマンドでマイグレーションファイルを作成できます。
db/migrate下に作成されます。

モデルも一緒に作る場合

“`
$ rails generate model モデル名 カラム名:型 カラム名:型 …
“`
こちらのコマンドで作成できます。

例としてpostモデルのマイグレーションファイルをカラム名、型を指定して作ってみます。

“`
$ rails g model post title:str

元記事を表示

【Rails】Railsコマンド一覧(備忘録)

# 【Rails】Railsコマンド一覧(備忘録)

## サンドバック
“`:terminal
rails console -s
“`
このコマンドを打ったのちに実行されるものはその後すぐにrollbackされる

元記事を表示

Rails devise validationに引っかからない方法

どうもチャンクノです!
deviseを使用するとUserモデルを更新したりする場合必ずパスワードのparamsを送らなければいけません。
ですが、deviseのメソッドをオーバーライドすることでパスワードをparamsから省くことができます。
この方法はググればすぐに出てきますが、もしUserモデルにパスワードのバリデーションをかけていた場合paramsから省いていたとしても一生登録できません。
自分は原因に気付くまで二日かかりました。まさかvalidationだなんて思わんて、、、。
同じ問題に直面している泣きそうな人たちの救いになればと思い、今回validationに引っかからずに登録する方法を記事にします。

paramsから省く記事はこちらを参考にしました。
https://easyramble.com/user-account-update-without-password-on-devise.html

本題の内容はUser.rbに以下を記述するだけです。

“`
def update_without_current_password(params)
para

元記事を表示

devise-auth-tokenでaccess-tokenをresponseで取得できない

###今回発生した問題
ページ内で`request.headers`にアクセスしても認証に必要な`access-token`や`client`が見当たらない。(apiをpostmanで叩いたら見れるのに…)

以下は**postman**に表示されたレスポンスヘッダ
スクリーンショット 2020-05-11 21.42.42.png

###原因
APIとクライアントが異なるドメイン上にある場合に、RailsAPIに`cross origin request`を許可する必要があり、`expose`に関する記述が抜けていた。

###参考にしたサイト
[devise-token-authの公式ドキュメント(英語)](https://devise-token-auth.gitbook.io/devis

元記事を表示

chart-js-railsでグラフを表示させたかったが上手くいかなった件(結論タイポ)

rails6で、gemの`chart-js-rails`を使用してグラフを作成しようとしたが上手くいかなかった。
原因が単なるタイポなのか、それともパスの関係などで上手く呼び出せていないのか判断できなかったので、`application.js`や`chart.js`が何なのか調べてみた。

##application.jsは何をしているのか
 マニフェストファイルというもので、ビューの`erb`ファイルが`application.js`だけを読み込めば済むように、読み込みたいjsファイルを`require`している。
 このファイルに読み込みたいjsファイルを`require`する。

##chart.js関係

 今回はちゃんと`chart.js`を読み込んでいる。

“`ruby:application.js

require(“chart.js”)
“`

 しかし、ビューには反映されていない。
 ここで二つの、そもそも疑問が出てきた。

①`applicatin.js`と同じ階層に`chart.js`が**ない**が、ちゃんと反映されているのか。よく見ると、他のrequir

元記事を表示

[メモ]Docker for mac 高速に by docker-sync

Railsの開発環境をdocker-composeで動かしていたが、めちゃくちゃ遅いなと思いながら2ヶ月そのまま過ごしていた僕に、光が差し込んだ。

https://qiita.com/pocari/items/0340049742927f3a94b7

## docker-syncをつかう。

準備

“`ruby
gem install docker-sync
brew install fswatch
brew install unison
“`
インストールしたらdocker-syncの設定

“`docker-sync.yml
version: ‘2’

syncs:
sync-volume:
src: ‘.’
“`

“`docker-compose.yml
version: ‘3’

services:
app:
build: .
tty: true
stdin_open: true
volumes:
– sync-volume:/sample-app:cached # キャッシュオプションもつけとくと早

元記事を表示

whereメソッドで生SQLを書く時の注意

文字列で生SQLを用意してwhereメソッドに渡す際
“”を渡すと、少々極端な例だが下記のようになる。

“`ruby
sql = “id = 1”
User.where(sql)
# 発行されるSQL
# SELECT `users`.* FROM `users` WHERE (id = 1)

sql = “”
User.where(sql)
# 発行されるSQL
# SELECT `users`.* FROM `users`
“`

エラーが出ず、不要なデータを取得するため注意。

元記事を表示

Railsでのコメント返信機能の実装

#Railsでのコメント返信機能の実装

Railsでコメントの返信機能を実装した際に実施した手順をまとめます。

## 目次
* [動作環境](#動作環境)
* [やりたいこと](#やりたいこと)
* [手順](#手順)
* [結果](#結果)
* [おわりに](#おわりに)

—————————————
## 動作環境
`OS : macOS Mojave 10.14.6`
`ruby : 2.6.3p62`
`rails : 5.2.4`

## やりたいこと
コメントに対して返信できる機能を実装したい。

完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526570/d4f28a4e-3079-ca2a-3c0f-f80d2f1550b4.png)

## 実装前のモデル

Commentモデルは1対多でUserモデルとPostモデルに紐付いている状態

“`ruby:schema.rb

create_table

元記事を表示

params・ストロングパラメータ

#paramsとは

railsのアプリケーション利用者がサーバーに対して送ってきた値を格納する箱です

例えば以下のようなformから送られてきたデータの場合

“`new.html.erb

“`

params[:content]としてコントローラーに送られます。

この時、nameに指定するのはキーの名前です。paramsはハッシュオブジェクトのようなものなので、キーに対して入力された値が格納されています

そして送られたコントローラー先で、テーブルにレコードを追加するcreateメソッドを記述しますが、セキュリティの問題上、ストロングパラメーターという技術を用いてデータの保存を行います

#ストロングパラメーター

“`hoge.controller.rb

def create
Hoge.create(hoge_params) ←プライベートメソッドの呼び出し
end

private

def hoge_params
params.permit(:content) ←特定のキー
end

元記事を表示

MVC

#イメージ

スクリーンショット 2020-05-11 20.37.51.png

#意味

モデル/ビュー/コントローラーの頭文字をとってまとめたキーワード。

Railsを初めとしたwebアプリケーションシステムの処理の流れの総称

大まかな処理の流れは上のイメージを参考にして下さい

元記事を表示

【初心者・最低限の設定】PostgresqlでCircleCiを使ってRspecをテストする方法

初めてCircleCiを動かす人向けの記事になります。
・Postgresql9.6
・ruby 2.6.3
・githubのmasterブランチにpushすればrspecを回してくれる設定です。
・自動でデプロイする昨日は今回はつけていません。

※本番環境への自動デプロイはgithubのmasterブランチにpushしてrspecを動かせるようになってからの設定をおすすめします。

config.ymlの設定はCircleCiの公式設定をそのままパクっています。

###まずは公式HPの設定をそのままconfig.ymlに貼り付けてから下記を参考にすると、エラーが少なく設定できると思います。

https://circleci.com/docs/ja/2.0/postgres-config/

“`config.yml
version: 2
jobs:
build:
docker:
#アプリのバージョンを指定
– image: circleci/ruby:2.6.3-node
environm

元記事を表示

多対多の関係で【collection_check_boxes】を使用し複数のカラムを表示・保存・更新・削除できる様にする。

## はじめに

フォーム関連の**`collection_check_boxes`**を使用する際に
わからないことがたくさんあったので記録のためにこちらに記述して残しておきます。
多対多の関係を構築するモデルの作成から潜影蛇手していきますので少し長くなります。。。
学習を初めて4ヶ月の素人に毛が生えた者ですので、説明が至らないところがあると思いますが大目に見ていただけると幸いです。
## 環境
ruby 2.5.7
Rails 5.2.4.2
## やりたいこと
shopに対して複数のgenre(和食・洋食など)を保存・更新できる様にする。
スクリーンショット 2020-05-11 14.58.33.png
##多対多の関係(モデル)
今回はジャンル検索でお店を検索するという機能を作りたいため、
shopに様々

元記事を表示

Rails+Vue+Docker+Webpackでの開発時に「net::ERR_EMPTY_RESPONSE」が繰り返される

#### 参考にさせていただいた記事
**・[Rails & Webpackerを最大限活用するために知っておくべきことまとめ](https://qiita.com/ttiger55/items/e45ec0febba3a412507e)**
**・[Webpacker使うなら最低限これだけは知っておいてほしいこと](https://qiita.com/chimame/items/8d3d6f4afea675cffa7d)**

#### Console上で、「net::ERR_EMPTY_RESPONSE」が繰り返される
Rails+Vue+Docker+WebpackでWEBアプリを開発中、タイトルの通り以下のエラーに遭遇しました。
スクリーンショット 2020-05-11 16.58.28.png

エラー

元記事を表示

Tech Canpのドリルって復習しづらくね?

## 近況報告
 先日,テック卒業後初めての面接に行ってきました。そこでの面接でとても違和感がありまして。まず,志望動機が全く聞かれなかったんですね。なんででしょうね。自分が考えたのは2点。この面接自体は他のことを聞く目的だったこと。もう1つは質問前に落第を受けていたこと。実際面接というよりは面談に近く,かなりラフで,自分の会社を話すというより業界について話す感じでした。それと,自分の履歴書がテックのテンプレートのままだったので,その企業への志望動機が記載されていなかったんですね。その時点で切られたのでしょうか。。。
 とりあえず反省点があっただけでも収穫なので次に活かす!

# 本題
 テックキャンプのドリルは受講料の半分くらい価値があると先輩が言っており,実際全くわからなかった問題もおおいので復習を始めたのですが,**ページ移動がめんどくさい!**
・スプレットシートから問題ウィンドウへ
・問題を提出するとJSのボタンが表示され別のページへ
・解答ページはこちらの「こちら」にしかタグがないためクリックが面倒
・自己採点終了ボタンを押すとマイページへ。。。以後繰り返し

# 対処法

元記事を表示

[Rails]Unable to autoload constant {コントローラークラス名}, expected {ファイルパス} to define it

##Railsで以下のエラーが発生

###raise LoadError, “Unable to autoload constant #{qualified_name}, expected #{file_path} to define it” unless from_mod.const_defined?(const_name, false)

![スクリーンショット (269).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554142/b920d555-c0ef-6d5f-291b-e2a2dba81ba4.png)
※一部ファイル名を隠しています

##解決方法
該当するコントローラーのファイル名を確認

“`homes_controller.rb

class HomeController < ApplicationController def top @name = 'yamada' end end ``` コントローラーのクラス名が間違っていました。

元記事を表示

[Rails]ブラウザ上で、ルート定義を確認する方法

オリジナルアプリを開発する中で、ルーティングを確認する機会が増えてきました。

普段は、ターミナルにrails routesをたたき、確認していたのですが、ルーティングの数が増えるにつれて、見辛くなってきました。

“`
$ rails routes
Prefix Verb URI Pattern Controller#Action
sessions_new GET /sessions/new(.:format) sessions#new
root GET / static_pages#home
help GET /help(.:format) static_pages#help
about GET /about(.:format) static_pages#about
contact GET /contact(.:format) static_pag

元記事を表示

OTHERカテゴリの最新記事