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

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

【Rails6】Docker環境でRSpecのシステムスペックを実行する

# はじめに

こちらの記事の続きとなります。

[【Rails6】Docker + Rails + MariaDB のローカル環境でアプリ開発を始めよう【おとなもこどもも、おねーさんも】](https://qiita.com/masarashi/items/61c5d9c63e9588b948f0)

Dockerコンテナで使用する Rubyイメージですが、システムスペックを実行する際に必要なブラウザがインストールされておらず、システムスペックを実行できません。
ブラウザをインストールしてしまうという方法もありますが、システムスペックは開発環境で実行し、本番環境では実行しないためブラウザが不要です。
何かをインストールすれば少なからずイメージ容量が増えてしまう点や、開発環境だけブラウザがインストールされるように Dockerファイルを作るのもメンテナンス性の観点から避けたいです。

そこで、ブラウザを別のコンテナとして起動することで解決します。

# RSpecの設定

RSpecの設定に関しては、「Everyday Rails – RSpecによるRailsテスト入門」を参考にさ

元記事を表示

[未経験エンジニア]のオリジナルアプリ制作の反省7. 開発に入るまでが勝負だという話

# 何を書くのか
一つ目のオリジナルアプリケーションを作成、運用しているうちに、先に決めなかったことで苦しんだことを項目ごとに簡単に振り返ります。ほとんど、自分への戒めです。お付き合い願います。

## 環境
Ruby: 2.6.5
Rails: 6.0.3.4

## 結論
これらの項目を取り上げます。

| 番号 | タイトル|
|:-:|:-:|
| 1 | ビューの構成をBEMで考える。 |
| 2 |いったん部分テンプレのことは忘れる |
|3 |後から読み返しやすいコードにしましょう|

# 1. ビューの構成をBEMで考える。
BEMとは、Block, Element, Modifierの略で、webサイトのコンポーネント化を行う
ためのフロントエンド設計方法の一つです。

詳細な説明については、[こちらの記事](https://www.codegrid.net/articles/bem-basic-1/)をご覧ください。

BEMがどんなものか、かなりざっくりと説明すると

– **classの命名規則**に共通認識を持ちましょう。
– **block >

元記事を表示

【Rails】Deviceでのユーザー登録時に、ランダム尚且つユニークなアプリ内IDを自動付与&後からユーザー自身で変更可能にする。

## はじめに
TwitterやInstagramでもユーザー名とは別でアプリ内IDがありますが、
そのイメージのやつを実装します。

自身のポートフォリオで実装しており、
当初は新規登録時にユーザーにて入力してもらっていましたが、
まずはランダムでアプリ内ID付与し、後から変更可能とするのが、
ユーザー目線かなぁ と感じ、後付けで実装しましたので、流れを記事にしました。

## 実装イメージ
+ public_uid gemを使用
+ Deviceでの新規登録時にアプリ内IDを自動付与
+ 後からユーザー自身で変更可能

## 前提
+ Rails5
+ 既にUserテーブルはできている

## 参考にさせていただいた記事
+ [deviseで会員登録時に乱数(ランダムな文字列)を生成](https://asalworld.com/1472/)
+ [updateの時だけvalidationを実行させる](https://www.cotegg.com/blog/?p=2300)
+ [GitHubのREADME.md](https://github.com/equivalent/pu

元記事を表示

Dockerのカスタムイメージを使ってGAE(FE)にRailsアプリケーションをコンテナデプロイする方法

## まだHerokuにデプロイしてるの?

Railsアプリケーションのデプロイ先といえばHerokuな印象がありますが、Herokuはリージョンの都合でレイテンシの問題があります。(あとはDBサーバーが高すぎる…)
ポートフォリオだったらHerokuで十分という意見もありますが、本格的なWEBサービスを運営する場合はHerokuだと色々と厳しくなってきます…(長期的に運用すると拡張性で悩むことが結構ある)
なので、最初からAWSやGCPでサーバーを構築した方がトータルでは楽だったりします。

## GAEとは?

GAEはGCPのサービスの1つです。
GAEにはSE(スタンダート)とFE(フレキシブル)の2つがあります。
今回の記事ではFEのカスタムイメージ(自分で用意したDockerファイルを使ってデプロイする方法)の解説をします。

### SE(スタンダート)
SEはHerokuに近いイメージでとても簡単にデプロイできるのですが、Googleが用意したイメージでデプロイするので拡張性は低いです。
簡単に構築できることがメリットなのですが、それが目的ならHerokuで十

元記事を表示

[rails]DRYとはなにか

#DRYとはなにか
DRYとはDon’t Repeat Yourselfの略で、「同じ情報を繰り返し定義しない」という考え方です。

情報とは、メソッドであったり、配列などのデータの集合体などを指し、同じコードを繰り返し記述しないということです。

DRYを意識することで、可読性の向上や、コード量を減らすことによりアプリケーションの動作が早くなることがあげられます。

DRYが意識出来てないコードです

“`ruby:DRYが意識できていないコード
def select_workout1
muscle = [‘ベンチプレス’,’デットリフト’,’スクワット’,’懸垂’,’腕立て伏せ’]
num = gets.to_i
workout1 = muscle[num]
puts workout1
end

def select_workout2
muscle = [‘ベンチプレス’,’デットリフト’,’スクワット’,’懸垂’,’腕立て伏せ’]
num = gets.to_i
workout2 = muscle[num]
puts workout2
end

元記事を表示

deviseの add_index :users, :email, unique: true 記述について

# なんでこの記事を書いたか
devise導入の際に生成されるマイグレーションファイルの下の方に
記述されている、

“`rb:マイグレファイル
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
“`
の“` add_index :users, :email, unique: true “`
をemailカラムにデフォルトで設定されているunique制約だと思い込んでしまって泥沼にはまったため

元はといえば、メンターさんにunique制約書いた方がいいよと言われて
「えっ、でもdeviseって元からunique制約かかってるよな」と

元記事を表示

gem kaminari(初心者向け)

はじめに

WEBサイトの下部の方には必ずと言ってもいいほど、ページを表す数字が並んでいるかと思います。
最近自身のポートフォリオの作成で使用したので、自身の備忘録として、またこれから実装する初心者の方の参考になればと思い投稿していきたいと思います。
※何らかの表示するビューが出来ている程で進めさせていただきます。

見本はこのようなものです

今回私自身が作成したのは下のタイプのもので、bootstrapやcssなどを使用しカスタマイズしております。デフォルトは上のタイプのもので、数字と英語が組み合わさったものになります。
![スクリーンショット 2021-02-12 1.06.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942338/07378c36-a31a-7775-3de5-3a50eef236f7.png)

![スクリーンショット 2021-02-12 0.56.00.png](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

コメント機能実装の際に詰まった。 [Rails,Ruby,binding.pry]

#環境
ruby 2.6.5
rails 6.0.0
MySQL
Github

#発生したエラー
コメント機能の実装の際、投稿後のリダイレクトに関する記述の部分で以下のエラーが発生

“`
No route matches {:action=>”show”, :controller=>”boards”, :id=>nil}, missing required keys: [:id]
“`

その時のコードは以下の通りです。

“`ruby:show.html.erb
<%= form_with(model: [@board, @comment], local: true) do |f| %>
<%= f.text_area :text, id:"text" %>
<%= f.submit "SEND" %>
<% end %>
“`

“`ruby:comments_controller
class CommentsController < ApplicationController def create @commen

元記事を表示

[Mac] PC本体の更新(アップデート後のエラー)について

##pcのスペック

・**MacOS BIG Sur**
最近更新してバージョン11.2.1
・**VScode**
バージョン:1.53.1
  
  
プログラミングの学習をするに当たって、
**VScode**を使用しているのですが、

**PC本体の更新**をする際に、毎回と言っていいほど、
VSコードの右下あたりに
  

「gitをダウンロードしますか?」と出て来ます。

**ダウンロードも何も現在進行形で使っています。**
  

定期的に最新の状態に保ってくれているのはすごく有難いんですが、
その本体更新後に毎回出てくる文字が邪魔なんで**解決法**を書いていきます。(*自分の場合の解決方法です)

  
  

もし、gitやその他、エラーが起きたら、本体のバージョンUpに伴って、
**コマンドラインツール**とのパスがうまく通っていない可能性があリます。
(恐らく環境構築あたり)

なので、
**Gitの場合**

xcode-select –install

をターミナルで打ってあげて、
**最新のソフトウェア**に更新してあげると、直る可能性

元記事を表示

CarrierWaveで表示する画像のサイズを考えた時のノート

## これは何?
画像を扱うアプリを練習で作っていました。そのときに、以前からしっかり調べたいと思っていた、解像度と画像の関係について調べたノートです。

[![Image from Gyazo](https://i.gyazo.com/87f5e07f58d29a4969e3109d9562bd94.gif)](https://gyazo.com/87f5e07f58d29a4969e3109d9562bd94)

実際に実装する際の足掛かりとしてまとめているだけなので、コードはほとんど書いていません。参考記事をまとめたノートにとどまっています。

## PCよりスマホの方が画像を大きく作成しないといけない理由

– **フルHD(1920 x 1080px)**… 一般的なオフィスで使われているPCの画像サイズ。13インチのノートPCだと、これより解像度が小さいこともある。

– **4K(3840 x 2160px)**… フルHDの四倍の解像度。同じ画面サイズでもフルHDの四倍の密度でピクセルが密集している状態

参考記事:[4Kテレビは2Kや8K、ハイビジョンやフルハ

元記事を表示

[HEROKU] heroku run rails db:migrate できなかったときの対処

git push heroku masterで本番環境にデプロイ後での、データベース作成の際に生じたエラーに関する記事です。

#環境
ruby 2.6.5
rails 6.0.0
db mysql2
Github

#エラーの経緯

本番環境にデプロイ後、heroku run rails db:migrateを行うと

“`terminal
rails aborted!
Mysql2::Error::ConnectionError: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
“`

というエラーが発生。

#手順

結論としては、DATABASE_URLが間違っていました。

以下、解決した手順を記載いたします。

1、ターミナルにて以下を実行
*この時、Created~となればオッケーです

“`terminal
heroku addons:add cleardb
“`

2、次に現在のDATABASE_URLを確認します。
*下記のように表示されるはずです。
CLEAR

元記事を表示

30代元食品工場長がフードシェアサービスのポートフォリオを約2週間で開発した話

# 前提
– 新卒から10年以上、畜産/食品系の会社で管理職。
– 本格的な学習は2020年夏頃から。
– スクールでの学習&独学(Progate,Dotインストール,Railsチュートリアル、書籍など)
– 技術自体は未熟ですが、ポートフォリオアプリをこれから作る人の参考になればと思います。

# jimoshare
[jimoshare](https://jimoshare.tk/)

– 注意:設定で、期日が過ぎると自動的に商品が見えなくなるので、就活終了した現在ほぼ商品がなくなりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/802059/da5076a9-5f19-08c5-a359-e7fc7a455b7e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/802059/ac900d6e-cc95-3252-63fd-b34126db1114.png)

元記事を表示

with_optionsで複数のバリデーションをまとめる

# with_options

`with_options 〇〇`と書くことで、
複数の情報に対して共通したオプションを付けることが可能。

## 具体例を用いて比較

「a、b、cそれぞれのカラムが空では保存できない」というバリデーションを設定する場合

“`rb:
class Sample < ApplicationRecord validates :a, presence: true validates :b, presence: true validates :c, presence: true end ``` >この様に共通の`presence: true`(カラムが空では保存できない)といった
validationをひとつひとつに設定していく

“`rb
class Sample < ApplicationRecord with_options presence: true do validates :a validates :b validates :c end end ``` >上記の様にdo〜end内でバリデーションを

元記事を表示

ユーザーのアクセス範囲の制限

#ユーザーのアクセス範囲の制限

“`ruby
before_action :authenticate_user!
“`
↑上記のコードを適用させたいコントローラーに設けることでそれぞれのアクションが実行される前にログイン画面に遷移されます。

“`ruby

before_action :authenticate_user!, only: [:new, :edit, :destroy]
before_action :authenticate_user!, except: [:index, :create, :show :update]
“`
書き方はonlyでもexceptでも可能

もしくはapplication_controller.rb内に

“`ruby
before_action :authenticate_user!
“`
と設けることで全ての動作の前にログインする画面に遷移するようになります。

今回説明したものは
Rails deviseで使えるようになるヘルパーメソッドの一つについてです。

↓こちらのリンクをご覧になるとわかりやすいと思います。

元記事を表示

heroku/デプロイ/エラー原因/bundler

herokuにデプロイする際に苦しんだ。
エラーは以下の通り

“`
remote: !
remote: ! Could not detect rake tasks
remote: ! ensure you can run `$ bundle exec rake -P` against your app
remote: ! and using the production group of your Gemfile.
remote: ! /tmp/build_0d17b8ad/config/boot.rb:4:in `require’: cannot load such file — bootsnap/setup (LoadError)
remote: ! from /tmp/build_0d17b8ad/config/boot.rb:4:in `
remote: ! from /tmp/build_0d17b8ad/bin/rake:3:in `require_relative’
re

元記事を表示

[Rails] Deviseでログイン後のredirect先を変更する

ユーザーがログインした後のページへの遷移をデフォルトから変更します。デフォルトでは `root_url` に飛ばされます。

#application_controller.rb に追記する
`after_sign_in_path_for` メソッドを追加して、ログイン後に遷移したいページを指定します。

“`:app/controllers/application_controller.rb
class ApplicationController < ActionController::Base (省略)... def after_sign_in_path_for(resource) pages_show_path  #ログイン後に遷移したいページを指定 end ``` ##redirect先をroutesで確認する `$ rails routes` を実行すると詳細が出てきます。 `get行` のみログイン後に遷移したいページを指定できます。 ``` new_user_session GET /users/sign_in(.:format) `

元記事を表示

コロン(:)と少しだけ仲良しになったという話(ruby)

#コロン(:)と少しだけ仲良しになったという話

前から思ってたんです。rubyにおける「 ” : (コロン)” がややこしい!」と。
今日は、” : “の位置が原因で起きたエラーのおかげで学んだことをアウトプットします。

結論: **シンボルは「文字列の皮を被った数値」である。trueはシンボルで書かなくていい。**

***

###▼エラー状況

“`ruby
rails routesをターミナルで実行した際以下のエラー文が出た(省略してます)
rb:45:in `presence’: wrong number of arguments (given 1, expected 0) (ArgumentError)
“`

###▼エラー理由

“`ruby
user.rb に書いたバリデーションで
正:presence: trueを → 誤:presence :trueとしていたため。
(:の位置が間違ってた)
“`
参考記事:https://diveintocode.jp/blogs/Technology/ErrorCollection

###▼わかってなかったこと

元記事を表示

M1 MacでDocker+Rails+Mysqlの環境構築ができるまで

M1 MacでDocker(プレビュー版)+Rails+Mysqlの環境構築に試行錯誤した話です。
正式版がでれば問題ないでしょうし、単に試行錯誤しただけなので誰の役にも立たないかもしれないですが、自戒の念をこめた備忘録として。。
初学者のためいたらない点が多々あるかと思いますが、間違ってる点などありましたらご教示ください。

# あらすじ

初学者の”ワタシ”が、M1 MacでDocker(Preview版)を使い
[こちら](‘https://www.youtube.com/watch?v=ltDdZAJli8c’)に倣ってRails+Mysqlの環境構築を試みる。

しかし、Mysqlが接続できない旨のエラーが発生。
偉大な先人の方々の記事をもとにあれこれ試すもうまくいかない。

白髪が3本増えたところで、最後、最後にもう一度だけ、、と
改めて「m1mac rails docker」でググったところ
[こちら](‘https://omathin.com/2021/01/16/m1-mac-dockercompose-rails/’)の神記事に出会い、無事”Yaaayyyyy!

元記事を表示

既存のRailsアプリに後からdeviseを導入する方法

# はじめに
作成中のRailsアプリにdeviseを導入した時のことを記事にします。
初めての記事ですので、間違っている点などあればコメントを頂ければありがたいです。
以下参考とさせて頂いた記事になります。


https://github.com/heartcombo/devise

https://qiita.com/cigalecigales/items/16ce0a9a7e79b9c3974e

https://qiita.com/gakkie/items/6ef70c0788c3cbff81ee

バージョン

“`
rails : 6.1.1
ruby : 2.6.6
devise : 4.7.3
“`
手順は初期の段階から導入する場合とそんなに変わりません

1. まずGemfileにgemを記載してインストールします

“`
gem ‘devise’ #追加
“`
“`
bundle install
“`

2. 続いて以下のコマンドを実行します

“`
rails g devise:install
“`

元記事を表示

【Rails】部分テンプレートの一部を特定のページでのみ表示するには?

共通の記述を部分テンプレート化したけど、ページによって一部分だけ記述を変えたいときってありますよね。
そんなときは、`current_page?`メソッドが便利です!

#current_page?メソッドとは?
表示中のページのパスを判定できるメソッドです。
引数にしたパスが表示中のページと同じかどうかを判定してくれています。同じであればtrueを返します。

“`
current_page?(判定したいパス)
“`
実際にHTMLファイルで使用する際は、以下のようにif文を用いて記述します。

“`
<% if current_page?(root_path) %>

現在のページはトップページです

<% end %>
“`
また、複数のページを指定することもできます。

“`
<% if current_page?(root_path, 〇〇_path, XX_path) %>
“`

#参考記事
https://railsdoc.com/page/current_page_q
https://qiita.com/zenizh/items/8b

元記事を表示

OTHERカテゴリの最新記事