- 1. 【RSpec】重複のバリデーションエラーを回避するFactoryBotの書き方
- 2. 【Rails6】ActiveRecordで与えられた配列順にorderする
- 3. uninitialized constant ActionDispatch::Session::RedisStore (NameError)
- 4. Rails の Credentials を Webpacker で管理するフロント側に共有したい
- 5. herokuのデータのバックアップとローカルのデータベースへのリストア
- 6. [rubocop] インデントを揃えるgem【初学者おすすめgem】
- 7. rails チュートリアル2週目~ヘルスケアwebサービスを自分で作る医者の日記~
- 8. if current_user.admin? && !current_user?(user)で「!」が必要な理由
- 9. 【jQuery】リロードしないとプレビュー表示できない→turbolinksが原因
- 10. 【Rails】Action Mailerのメール送信に失敗する
- 11. config/initializersにカスタムバリデータを定義する
- 12. CentOS7(Docker)でRuby on Railsを構築しようとしたらグダグダした話
- 13. コード書いたことないPdMやPOに捧ぐ、Rails on Dockerハンズオン vol.2 -Hello, Rails on Docker-
- 14. Rails6 のちょい足しな新機能を試す 119(filter_paramters 編)
- 15. 【アプリ新規作成】bundle installができない!【解決】
- 16. HTMLメールで画像を載せる [rails][初心者]
- 17. enum属性をもつカラムの値を取得する [初心者][rails]
- 18. 【全解説付き】Rails本番環境向けの一番シンプルなDockerfile
- 19. Docker docker-compose up時、You must use Bundler 2 or greater with this lockfile. という地獄のエラー
- 20. Dockerを使ったRuby on Railsで問い合わせフォームの作成
【RSpec】重複のバリデーションエラーを回避するFactoryBotの書き方
ユーザー登録でemailを重複させないようにバリデーションをかけましが、テストのときにでFactoryBotで複数ユーザを予め生成する必要があったので方法を調べました。シーケンスを使ってユニークなデータを生成するやり方で、備忘録として残します。
問題点
–ファクトリーで複数のユーザをセットアップする際に、emailをバリデーションでユニークなデータとして設定している場合、下記のようにするとテストコードが走る前に例外が発生します。
“`ruby:spec/factories/users.rb
FactoryBot.define do
factory :user do
user_name { “tester” }
email { “tester@example.com” }
password { “password” }
end
end
“`“`ruby:spec/models/user_spec.rb
it “複数のユーザー登録” do
user1 = FactoryBot.create(:user)
user2 =
【Rails6】ActiveRecordで与えられた配列順にorderする
# やりたいこと
ActiveRecordを与えられた配列順でorderしたい。
ids配列にユーザのidが格納されていて、このidの格納順に従って、Userモデルに対してorderしたい。“`ruby
ids = [6,2,24,5,3,7]
“`# 問題
Rails5.1までは以下の書き方で配列ids順にuserをorderすることができました。“`ruby
User.where(id: ids).order([‘field(id, ?)’, ids])
“`しかし、Rails5.2以降(Rails 6も)ではこのような書き方をすると
エラーが発生します。“`
DEPRECATION WARNING: Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s): “FIELD(id, ?)”. Non-attribute arguments will be disallowed in Rails 6.1
uninitialized constant ActionDispatch::Session::RedisStore (NameError)
# エラーの内容
Rails 5.2からはredisがビルドインされるようになりました。
それに伴い`redis-rails` gemが不要になったとのことでGemfileから削除しましたが、以下のエラーが発生しました。
https://railsguides.jp/5_2_release_notes.html#redis-cache-store`NameError: uninitialized constant ActionDispatch::Session::RedisStore`と言われているので、Redis関連の設定に関係していることがわかります。
“`
NameError: uninitialized constant ActionDispatch::Session::RedisStore
/usr/local/bundle/gems/railties-6.0.2.1/lib/rails/application/configuration.rb:282:in `const_get’
/usr/local/bundle/gems/railties-6.0.2.1/lib
Rails の Credentials を Webpacker で管理するフロント側に共有したい
賛否ありますが、Railsにベッタリの開発をしていると、なるべくRailsに寄せて考えたくなることがあります。
そんな
– Webpacker 使ってるプロジェクト
– 環境によって変わる値を環境変数ではなく Credentials にまとめたい。分散させたくない。
– フロントエンドでも使いたい。たとえば Firebase の Project ID や API Key のようなDev,Stg,Prod環境ごとに違って、かつフロントエンドコードに含めて問題ないもの。そんなときの話です。
– webpack 4.41.5
– webpack-dev-server 3.10.2
– webpacker 4.2.2
– Rails 6.0.1## Webpacker::Compiler.env は bin/webpack-dev-server を使うとうまくいかない
こんな Credentials があったとき
“`yaml
# bundle exec rails credentials:edit –environment=development
firebase:
herokuのデータのバックアップとローカルのデータベースへのリストア
しょぼいメモを残します
データベースでpostgresqlを使っている時のみです。## バックアップ
“`
curl -o latest.dump `heroku pg:backups public-url -a アプリ名`
“`## リストア
“`
pg_restore –verbose –clean –no-acl –no-owner -h localhost -U ローカルのDBユーザー名 -d ローカルDB名 latest.dump
“`
[rubocop] インデントを揃えるgem【初学者おすすめgem】
#概要
今回は効率よくインデントを揃えるgemの紹介をします。プログラミングを学習してはや6ヶ月経ちました。
少しづつ転職も始め、ある企業様から私のgitをみてインデントがオカシイと非常にありがたいフィードバックを頂きました。
そこで**第三者からみて**コードの読みやすさの大切さに改めて気づきました。
##こんな人に読んでほしい!!
– 現在、プログラミングを独学またはプログラミングスクールで学び、転職しよう!って思っている方。
– インデントを効率よく揃える方法を知りたい!って思っている方。
– 綺麗なコードを書きたい!って方。#綺麗なコードを書く重要性
エンジニアとして働くにあたり、
**他の人が読みやすいコードを意識する**必要性があると思いました。##理由
(1)プロダクトの共同開発
(2)万が一、担当から外る or 担当のメンバーが増えた際に、プロダクトのスムーズな引き継ぎ
(3)バクが起きた際に、可読性が高いと解決できるスピードが早まる※あくまで私が思い浮かんだ理由をあげました。もしかしたら他にも理由があるかも知れません。
以上の理由から、現場に入った
rails チュートリアル2週目~ヘルスケアwebサービスを自分で作る医者の日記~
2章最後でつまづく
“`
We’re sorry, but something went wrong.
If you are the application owner check the logs for more information.
“`
“`
heroku run rails db:migrate
“`
するもだめログ確認すると
“`
2020-02-04T11:59:16.635000+00:00 heroku[router]: at=info method=GET path=”/” host=hidden-ravine-49191.herokuapp.com request_id=309bfa62-5483-4e2d-84c9-2e306989f7d0 fwd=”118.109.109.117″ dyno=web.1 connect=0ms service=13ms status=500 bytes=1827 protocol=https
2020-02-04T11:59:16.622565+00:00 app[web.1]: I, [2020-02-0
if current_user.admin? && !current_user?(user)で「!」が必要な理由
##事象
railsチュートリアル「10.4.2 destroyアクション」において、
「現在のユーザーが管理者のときに限り」という条件を作るためにチュートリアルでは、下記のように記載されていました。“`app/views/users/_user.html.erb
<% if current_user.admin? && !current_user?(user) %>
“`2つの条件が成り立つ場合のif文になります。
右の条件において先頭に「!」が必要になる理由がわからなかったので記事にしました。
具体的には、現在のユーザーを「!」で否定すると条件が成り立たないのではと疑問に思っていました。※左の条件は現在ログインしているユーザーが管理者権限を持つか判定しています。
##!の意味
!はnot演算子です。
式の値が真である時偽を、偽である時真を返します。`!true=>false
!false=>true
`##!current_user?(user)が何を表すか
current_user?の判定を「!」で逆転しています。
ここでは、
current_user
【jQuery】リロードしないとプレビュー表示できない→turbolinksが原因
写真投稿アプリを作成中に、jQueryを用いてプレビュー表示機能を実装しようとした所、うまくプレビュー機能が機能せず、リロードを行うとプレビュー表示が成功するという問題に直面しました。
調べた所、初心者に多いミスらしく、私自身もJavaScriptにおいてturbolinksの概念が無かったため、解決にかなり時間を要しました。
ネット上でも同じような悩みを抱えている方が多かったため、参考になればと思い手順をまとめました。##環境
ruby 2.5.1
rails 5.2.4##やりたかった事
写真投稿フォーム
↓
画像を選択
↓
選択した画像がプレビュー表示される##発生した問題
写真投稿フォーム
↓
画像を選択
↓
$\color{red}{\rm 選択した画像がプレビュー表示されない}$
↓
リロード
↓
画像を選択
↓
選択した画像がプレビュー表示される###問題のコード
“`js:jquery
$(function(){
fileField = $(‘#file’)
#選択された画像を取得し表示
fileField.on(‘
【Rails】Action Mailerのメール送信に失敗する
#症状
Action Mailerを利用したメール送信処理で、以下のエラーを吐いてしまう。
なお以前は正常に送信することができていた。`Net::SMTPAuthenticationError (530 Authentication required):`
`ArgumentError (SMTP To address may not be blank: []):`
#原因
環境変数を正常に読み込めていなかった。
SMTP認証情報やお問い合わせ宛先メールアドレスを環境変数に入れていたため、それらの情報を利用することができず、送信に失敗した。#対処
1.アプリケーションサーバー停止
`pumactl stop`2.アプリケーションサーバー起動
`rails s`#根本原因は?
不明。
EC2のインスタンスを止めたり、立ち上げたりしていたので、それが契機っぽいが。。
config/initializersにカスタムバリデータを定義する
## 電話番号にバリデーションを使用する
[telephone_number](https://github.com/mobi/telephone_number)というgemを使用してカスタムバリデーションを定義する。まずはgemを定義
“`
gem ‘telephone_number’
“`そしてbundle install!
“`
$ bundle
“`config/initializeに下記のように定義
“`config/initializers/tel_validator.rb
module ActiveModel
module Validations
class TelValidator < EachValidator def validate_each(record, attribute, value) return if value.blank? record.errors.add attribute, :invalid unless TelephoneNumber.valid?
CentOS7(Docker)でRuby on Railsを構築しようとしたらグダグダした話
次のプロジェクトで扱うシステムがRuby on Railsで構築されている。
ruby及びrailsは全く触った事が無かったので、家で勉強しようとして、
centos7コンテナ上で実行するまでにぐだぐだした話を**端折らず**に書く。# イメージをpull
“`bash
docker pull centos:7
“`# コンテナ起動
“` bash
docker run –name test -itd -p 3000:3000 centos:7 bash
“`# コンテナに接続
“` bash
docker exec -it test bash
“`# ruby入れる
“`bush
yum install ruby -y
“`“`bash
ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
“`# rails入れる
“`bash
gem install rails
“`
“`bashERROR: Error installing rails:
i18n requi
コード書いたことないPdMやPOに捧ぐ、Rails on Dockerハンズオン vol.2 -Hello, Rails on Docker-
この記事はなにか?
この記事は私が社内のプログラミング未経験者、ビギナー向けに開催しているRuby on Rails on Dockerハンズオンの内容をまとめたものです。ていうかこの記事を基にそのままハンズオンします。ハンズオンは
1回の内容は喋りながらやると大体40~50分くらいになっています。お昼休みに有志でやっているからです。
現在進行形なので週1ペースで記事投稿していけるように頑張ります。
ビギナーの方のお役にたったり、同じように有志のハンズオンをしようとしている人の参考になれば幸いです。
他のハンズオンへのリンク
・ [Vol.1 – Introduction -](https://qiita.com/at-946/items/ffc0ebcc4d08f958197b)
・ Vol.2 – Hello, Rails on Dock
Rails6 のちょい足しな新機能を試す 119(filter_paramters 編)
# はじめに
Rails 6 に追加された新機能を試す第119段。 今回は、`filter_parameters` 編です。
Rails 6 では、 filter_parameters で proc を使って、フィルターしたときに、パラメータが配列になっているときに、フィルターされないというバグが修正されています。Ruby 2.6.5, Rails 6.0.2.1, Rails 5.2.4.1 で確認しました。 (Rails 6.0.0 でこの修正が入っています。)
“`shell
$ rails –version
Rails 6.0.2.1
“`今回は、User を2つ登録する画面を作って、その動作を確認します。
なお、 `filter_parameters` の動作を確認するための手抜き実装になってます。# Rails プロジェクトを作る
Rails プロジェクトを新たに作成します。
“`shell
$ rails new rails_sandbox
$ cd rails_sandbox
“`# User モデルを作る
`name` を持つ Us
【アプリ新規作成】bundle installができない!【解決】
どうも、おささです。
エラーから始まる初投稿( ゚∀゚)・∵. グハッ!!事の発端は、
railsで新規アプリを作成しようと、
ターミナルから「rails new」をした後に起きたある事件。「 Could not locate Gemfile 」
・・・はて?
先月プログラミングを始めた私には難易度の高い問題だった。
どうやら
「ジェムファイルがそのコマンドを実行させているフォルダにありません」
ということらしい。元々同じアプリは作っていて、復習のために再度作り始めようとした時、
別のエラーが出たので一度全部削除をした矢先の出来事だった。「さっき消したのがまずかったんだろうか・・・」
「もう一度ゴミ箱から復活させれば戻るだろうか・・・」・・・
戻らない。
記事を色々調べた結果、
「 Gemファイルをインストールする階層が違った 」
ターミナルで、pwdを入力し確認したつもりだった。
”つもり”だった。
きっと、そこでつまずくと思わず、気を抜いていたんだろうと思う。階層を一つ下にしたところ、無事インストールされました
HTMLメールで画像を載せる [rails][初心者]
#HTMLメールに画像を載せたい
####すでにメール送信はできるけど、画像がうまく表示されない
これを記述する:point_down_tone2:“`mailer.rb
attachments.inline[‘画像file名’] = File.read(‘app/assets/images/画像file名’)
“`おそらくここの部分`’app/assets/images/画像file名’`
はpublic配下とかでも大丈夫だと思います。“`mailer.rb
def send_when_creater(user)
attachments.inline[‘vegetable.png’] = File.read(‘app/assets/images/vegetable.png’)
@user = user
mail to: user.email,subject: “こんにちは”
end
end
“`###mailer view
画像を表示したいところに記述しましょう:point_down_tone2:“`html.erb
省略
enum属性をもつカラムの値を取得する [初心者][rails]
##enum属性をもつカラムの値を取得したい
モデルに記述するこういうのです:point_down_tone2:
“`ruby
enum status: {
error: 0,
shipping: 1,
completed: 2,
}
“`errorはなんらかの不具合、shippingは配送中、completedは配送完了
ちなみにstatusカラムの `error: 0` は
errorが`key`
0が`value`##key取得方法
上記のようなstautsカラムをもつOrderモデルで“`ruby
Order.shipping?
“`で取得可能
enumの便利なメソッドです:thumbsup_tone2:###間違えた例
“`ruby
Order.status.shipping?
“`と記述してしまいエラーになっていました
【全解説付き】Rails本番環境向けの一番シンプルなDockerfile
何度か Rails の本番環境を Docker で構築してきて、イメージの設計図ともいえる `Dockerfile` も段々と洗練され、ここしばらくで一番シンプルなものに落ち着いた。シンプルでありながら、イメージサイズをコンパクトに、またビルド時間もなるべく抑えられるバランスの良い構成にできたので、ここで紹介する。
# 方針
シンプルな `Dockerfile` を目指しつつも、十分実用(本番環境用)として使えることを意識している。具体的には、以下のような方針:
* **`Dockerfile`をなるべくシンプルに保つ** → 読みやすく、保守しやすいように
* 命令は基本的に最低限かつ素直に書いて、Docker特有の「トリック」は必要なときにだけ使う
* `Dockerfile`が複雑になりがちなマルチステージビルドなどは、今回は不採用
* **イメージサイズをなるべく小さくする(が、最小にはこだわらない)** → デプロイ時間の短縮、ストレージの節約のため
* 不要なパッケージやキャッシュ等は極力削除する
* ただし、`Dockerfile`が
Docker docker-compose up時、You must use Bundler 2 or greater with this lockfile. という地獄のエラー
#背景・エラー発生状況
1. Dockerfileとdocker-compose.ymlの作成
2. Dockerfileの記載
3. docker-compose.ymlの記載
4. database.ymlの変更この流れを行った後に、
###docker-compose up
行ったところ、“`
You must use Bundler 2 or greater with this lockfile.
“`なんだこれは、、、
bundlerが悪さしていることに間違いない!!
bundlerのversionを調べて見ると!###2.0.1
#いろいろ調べた結果、、、
##Bundlerのバージョン2.0.1が悪さをしている模様。
以下の手順で以前のバージョンを入れる
1. gemfile.lockの中身全削除
2. $ gem install bundler -v バージョン
古いバージョンのBundlerのGem取得
3. $ bundler バージョン install
Bundlerをインストール
4. docker-compose build
Dockerを使ったRuby on Railsで問い合わせフォームの作成
#問い合わせ機能の実装
自分向け個人的な備忘録。
開発環境はDockerを使用。
view画面ではhamlを使用。
行う順序としては1. routesの設定
2. コントローラーの設定
3. 問い合わせフォーム作成
1. モデルの作成
2. viewの作成
4. 問い合わせフォームのMailers#1. route設定
– scaffoldでcontactsのCRUDを作成する。“`
$docker-compose run web rails g scaffold contacts$docker-compose run web rake db:migrate
“`/app/views/contactsフォルダの中に、
**・confirm.html.haml**
**・thanks.html.haml**を作成する。
“`ruby:config/routes.rb
resources :contacts
“`となっているので
“`ruby:config/routes.rb
resources :contacts do
collec