- 1. 【Ruby on Rails】デフォルトメッセージの日本語化
- 2. #Rails ActionMailer + #Rspec でメール送信数 / 送信先をテストする例
- 3. ページネーションと並び替えに対応した投稿一覧画面とAPIの実装【初学者のReact×Railsアプリ開発 第10回】
- 4. ActionView::MissingTemplate in Groups#newの一例
- 5. Bugsnagで特定のエラーの通知を無効化する
- 6. 【Rails】destroyメソッドを使用しようとしたら”ArgumentError (wrong number of arguments (given 0, expected 1)):”
- 7. 個人開発 Web アプリの認証周りを Auth0 に移行した
- 8. railsのデータベースをmysqlにする
- 9. 【実践】SolidusでRails製ECサイトを作ってみる
- 10. rails: 絶対に分かるhas_one :through関連付ける方法
- 11. トランザクションのネストの使い方まとめた(初心者向け)
- 12. 初心者向けVue.js × Railsでのアプリ作成(ToDoリスト編)
- 13. docker-compose up でrails サーバーを立ち上げたときのBundler::GemNotFound対策
- 14. 【Rails】Rails g model書き方
- 15. #Rails + #rspec / ActiveJob perform_later or deliver_later and send email difficult to test. how to resolve it?
- 16. [Rails] rails db:migrate してもなぜかmigrationファイルが無視されるとき
- 17. Tinder風UIで「好き」「嫌い」を投票できる画面を実装する【React×Railsアプリ開発 第8回】
- 18. そのまま書くには違和感のあるロジックはクラスに分離しよう〜毎週○曜日に実行されるRakeタスクの実装を例に(Heroku)
- 19. #Rails / has_one and has_many association both / without DB foreign key
- 20. #Rails で DBに外部キー制約がない場合 has_one と has_many のアソシエーションを両方指定できそうだ
【Ruby on Rails】デフォルトメッセージの日本語化
エラーメッセージなどのデフォルトメッセージを日本語化する設定です。
バージョン情報
–
Ruby 2.6.3
Ruby on Rails 5.2.3設定方法
–
`config/initializers/`配下に`locale.rb`というファイルを作成します。ファイル名は何でも良いですが習慣上`locale.rb`にしてあります。下記の2文を記載します。
“`ruby:config/initializers/locale.rb
I18n.config.available_locales = :ja
I18n.default_locale = :ja
“`日本語の辞書ファイルを作成します。
`config/locales/`に`ja.yml`というファイルを作成し、下記のURLの本文を作成したファイルにすべてコピペします。https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
モデル名などはまだ英語のままなので、個別で日本語化していきます。
`config/locales/
#Rails ActionMailer + #Rspec でメール送信数 / 送信先をテストする例
“`rb
subject { something }it do
expect { subject }.to change { ActionMailer::Base.deliveries.count }.by(3)
end“`
“`rb
before { subject }it do
expect(ActionMailer::Base.deliveries.map(&:to)).to include [‘alice@example.com’]
expect(ActionMailer::Base.deliveries.map(&:to)).to include [‘bob@example.com’, ‘carol@example.com’]
end“`
# Original by Github issue
https://github.com/YumaInaura/YumaInaura/issues/2943
ページネーションと並び替えに対応した投稿一覧画面とAPIの実装【初学者のReact×Railsアプリ開発 第10回】
#やったこと
* Reactでの投稿一覧画面の実装と並び替えに対応するためのRails APIの実装
* ラジオボタンの変更によるAPIからの投稿の取得と表示
* reduxを使った表示する投稿の状態管理
* material-ui-flat-paginationを用いたページネーションの実装#成果物
![qkb5r-7d5kg.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367226/cdec2d86-b5c8-d4f1-30f9-c51e83303614.gif)#Rails APIの実装手順
###route.rb: ルートの編集
“`ruby:route.rb
Rails.application.routes.draw do
namespace :api, defaults: { format: :json } do
namespace :v1 doget ‘posts’, to: ‘posts#index’
get ‘posts_suki’,
ActionView::MissingTemplate in Groups#newの一例
# 1.どんなエラー?
renderメソッドで表示しようとしている、viewファイルがありませんという内容です筆者の場合は同じgroupsフォルダ内のformというファイルで記載したものを引用しnewファイルで表示しようとしていました。(下記参照)
###### <エラー文>
###### <エラーに関係したgroupsフォルダ内のファイル>
“`haml:new.html.haml
.chat-group-form
%h1 新規チャットグループ
= render partial: ‘form’, locals: { group: @group }
“`“`haml:form.html.haml
= form_fo
Bugsnagで特定のエラーの通知を無効化する
最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!#BugsnagでRailsの不具合を通知
Railsのエラー監視にBugsnagを利用しています!Slackとの連携をしていてエラーが発生したら通知が飛ぶ様にしております。
今回は、Bugsnagのエラーで通知されるエラーは優先度が高いもののみにしたかったのサービス自体に影響がないエラーの通知を一旦無効化することになりました。
[Bugsnagと黒魔術で、Railsの不具合調査を楽にする仕組み! | 株式会社スタメン](https://stmn.co.jp/tech/4431/)#Bugsnagで特定のエラーを無効化する
Bugsnagの公式ドキュメントを確認してみると以下の様な記述がありました!
これによると個々のエラーは破棄できます。 破棄されると、エラーはダッシュボードからすぐに削除され、受信した後続のイベントは保存されなくなる様です!“`
Discard indivi
【Rails】destroyメソッドを使用しようとしたら”ArgumentError (wrong number of arguments (given 0, expected 1)):”
## はじめに
Railsの`destroy`メソッドを使用しようとしたら以下のように**引数が1つ必要なのに見つかりません**とエラーが発生しました。
凡ミスですが、記録として残します。“`shell
ArgumentError (wrong number of arguments (given 0, expected 1)):
“`## 環境
“`yaml
OS: macOS Catalina 10.15.1
Ruby: 2.6.5
Rails: 6.0.2.1
“`
## 結論:解決法
今回のコードは以下のようになっていました。“`ruby
def destroy
posts = Post.where(user_id: 1)
posts.destroy #ここでエラー発生
end
“`
↓“`ruby
def destroy
post = Post.find_by(user_id: 1)
post.destroy #これは通る
end
“`
このように、`find_by`にすると通ります。もしくは、該当データが複数ある場合は
個人開発 Web アプリの認証周りを Auth0 に移行した
個人開発している Ruby on Rails アプリ [LiveLog](https://livelog.ku-unplugged.net/) の認証周りを [Auth0](https://auth0.com/jp/) に移行しました。
この記事では、移行に関して以下を紹介します。– 背景: なぜ移行したか
– 方法: どうやって移行したか
– 結果: 移行してどうだったか# 背景: なぜ移行したか
## LiveLog について
はじめに、対象の Web アプリについて簡単に紹介します。
LiveLog https://livelog.ku-unplugged.net/ は、私が所属していた軽音サークルのセットリスト管理アプリです。2016年に CakePHP から Ruby on Rails にリプレースし、それ以来 Heroku Hobby Dyno + Heroku Postgres で稼働しています。
[Ruby on Rails チュートリアル](https://railstutorial.jp/) に沿って開発したので、認証周りは [devise](htt
railsのデータベースをmysqlにする
#rails アプリ作成時
“`
rails new アプリケーション名 -d mysql
“`#データベース設定ファイル config/database.yml
“`database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: ****
password: ****
host: 127.0.0.1development:
<<: *default database: データベース名 ``` #scaffoldを使ってテストをする * scaffoldとはCRUD機能を簡単にテストすることのできるrailsの機能 ``` rails g scaffold モデル名 カラム名:型 ``` http://localhost:3000/モデル名s でアクセスするとテストページに飛ぶ
【実践】SolidusでRails製ECサイトを作ってみる
SolidusはSpreeの後継のRails製オープンソースECサイトのプロジェクト。
OSSを使わないとしても、ECに最低限の機能が入ってるので、自分たちで機能の洗い出しするより、これを参考にした方が早い。# 準備
以下をインストールしていない人はインストール
Rubyはバージョンが低いとfiniteのエラーが出ます。
テスト環境ではv2.5.1を使用しました。“`
brew install sqlite3 imagemagick
“`### 1. Railsアプリを作成
“`bash
rails new myshop –skip_webpack_install
cd myshop
“`### 2. Gemfileに以下を追加
“`ruby:Gemfile
gem ‘solidus’
gem ‘solidus_auth_devise’
“`‘solidus’をrequireすると、以下がまとめてインストールされます。個別にインストールすることも可能なよう。
`solidus_core`
`solidus_api`
`solidus_front
rails: 絶対に分かるhas_one :through関連付ける方法
### 前提
ユーザー・予約・住所の3つのレコードで“has_one :through“を使用し、アソシエーション関係を作りたいと思います。### 実際のコード
“`ruby
class Booking < ApplicationRecord # ユーザーテーブルに対して一対一の関係を示している has_one :user # has_one :addressはユーザーテーブルにある has_one :addressのことである。 # throughは上記に書かれているhas_one :userのことである has_one :address, through: :user end ``` ```ruby class User < ApplicationRecord has_one :address, dependent: :destroy end ``` ```ruby class Address < ApplicationRecord belongs_to :user end ``` ### 要約 要約すると、``has_one through``の
トランザクションのネストの使い方まとめた(初心者向け)
トランザクションのネストについてまとめてみました
どう記述したらネストができるの?
ロールバックした時の挙動は?
などなどまとめてみました
自分がよく使うMySQLとRails(ActiveRecord)について記載します。他のDBやフレームワークでは多分話が変わりますのでご注意ください# 前提
## ネストしたトランザクションの挙動
ネストしたトランザクションって、正確な挙動がこうあるべきという決まりがあるのかどうかは筆者はよく知りません
ここでは、以下のような挙動を満たすことを目的にします– トランザクションの内部に、もう一つトランザクションを貼る
– 内側のトランザクションがロールバックした場合、外側のトランザクションには影響を与えない
– 外側のトランザクションがロールバックした場合、内側のトランザクションもロールバックする
– 内側だけコミットされてしまうと、外側のトランザクションから見ると一貫性が破綻することになるため
– つまり「内側だけコミットする」はナシ。「内側だけロールバックする」はアリ## テストデータ
この記事では、以下のような `user
初心者向けVue.js × Railsでのアプリ作成(ToDoリスト編)
# はじめに
最近、Vue.jsとRailsでアプリを作っているのですが、Vue.jsとRailsでアプリを作る記事が少なく、勉強するのに少し不便でした。
Vue.js × Railsの記事が少ないと言っても探せばそれなりに見つかるのですが、私みたいなフロントエンドの事よくわかってない人間には、理解するのに時間がかかったりします。
ネットで記事をあさったり、そもそもJavaScriptが良くわかってないので、JavaScriptから勉強し直してみたり、Vue.js × Railsでアプリを作るだけにしては非常に遠回りしてしまいました。
## この記事について
この記事は、私みたいに**Vue.js × Railsのアプリ作成で遠回りな勉強をしている人をなくす事**を目的としています。初心者向けにVue.js × Railsでアプリを作る記事を書いて、実装のイメージを掴んでもらえれば、私のような遠回りはなくなるはず。。。1度小さいアプリを作ってしまえば、理解度がグッと上がり、他の記事も読みやすくなるのできっと大丈夫!
また、この記事は私がRubyエンジニアなので、Rubyエ
docker-compose up でrails サーバーを立ち上げたときのBundler::GemNotFound対策
docker-compose upしてもコンテナが落ちる。
#構成
#### DockerFile“`
FROM ruby:2.5
ENV LANG C.UTF-8
ENV WORKSPACE=/usr/local/src/# install bundler.
RUN apt-get update && \
apt-get install -y sudo && \
apt-get install -y vim less && \
apt-get install -y build-essential libpq-dev&& \
gem install bundler && \
gem update && \
apt-get clean
#&& \RUN curl -sL https://deb.nodesource.com/setup_10.x | bash – \
&& apt-get install -y nodejs && \
rm -r /var/lib/apt/lists/*
【Rails】Rails g model書き方
Rails g model書き方の備忘録です。
書き方
–
“`bash:ターミナル
rails g model モデル名 カラム:データ型
“`モデル名
–
– 大文字で始める
– 単数形カラム:データ型
–
半角スペースで連続で記載できる“`bash:ターミナル
rails g model Post content:text image:string
“`データ型
–
string:255文字までの文字列
text:255文字以上の文字列
integer:整数
#Rails + #rspec / ActiveJob perform_later or deliver_later and send email difficult to test. how to resolve it?
change later to now and test it!
“`rb
it { expect { perform_enqueued_jobs { subject } }.to_not raise_error }
“`# Original by Github issue
https://github.com/YumaInaura/YumaInaura/issues/2942
[Rails] rails db:migrate してもなぜかmigrationファイルが無視されるとき
# Versions
“`bash
$ ruby -v
ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]
$ bundle exec rails -v
Rails 5.1.7
“`# 症状
こういうことが起きた。
まず、migrateされていないmigrationファイルがあることを確認。
“`bash
$ bin/rails db:migrate:statusdatabase: database名
Status Migration ID Migration Name
————————————————–
up 20200101xxxxxx Devise create users
…(略)
down 20200101xxxxxx Drop users
“`
OK!(`・ω・´)では、migrateしよう。
“`bash
$ bin/rails db:mi
Tinder風UIで「好き」「嫌い」を投票できる画面を実装する【React×Railsアプリ開発 第8回】
#やったこと
* Tinder風UIで投稿に対して、「好き」か「嫌い」が投票できる画面を実装した。
* モジュールは[react-swipe-card-chsstm](https://www.npmjs.com/package/react-swipe-card-chsstm)を使って、Tinder風UIを実装した。#今回の成果
![v1n1g-k17jj.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367226/0a786baa-8dfb-c52a-b708-c0c1b3f648ee.gif)#できなかったこと
* react-swipe-card-chsstmのコードを修正して使いたかったが、どうしても修正後のモジュールが上手くインストールできなかった。
* Github上でForkしたあとにコード修正、再度インストールまでは良かったが、トランスパイル(コンパイル)が上手くいってないのかな〜…#実装手順
###モジュールインストール
ここでインストール済み。npm install
そのまま書くには違和感のあるロジックはクラスに分離しよう〜毎週○曜日に実行されるRakeタスクの実装を例に(Heroku)
## 問題
Herokuでスケジュール実行のために用意されているアドオンHeroku Schedulerでは「10分毎」「1時間毎」「1日毎」のオプションが用意されているものの、「1週間毎」に実行したいときのオプションはないので、週次でタスクを実行したい場合はRails側で実装する必要があります。さて、それでは週次で実行するための判定処理はどこに書くべきでしょうか?
## よくあるコード
こんなときよく見かけるのがパターンAとパターンBのコードですが、双方ともデメリットが大きいです。
### パターンA: Rakeタスク側に判定コードを書く
“`ruby
DAY_OF_WEEK = %i[sun mon tue wed thu fri sat].freezenamespace :awesome_check do
desc ‘Invoke AwesomeChecker’
task run: :environment do
if DAY_OF_WEEK[Date.current.wday] == :sat
AwesomeChecker.call
#Rails / has_one and has_many association both / without DB foreign key
You can specify both
“`rb
class User < ApplicationRecord has_one :book has_many :books end ``` If use has one association and user has many books ``` user.book ``` then it maybe returns newest one "book" instance but it does not return older other instances # Original by Github issue https://github.com/YumaInaura/YumaInaura/issues/2940
#Rails で DBに外部キー制約がない場合 has_one と has_many のアソシエーションを両方指定できそうだ
You can specify both
“`rb
class User < ApplicationRecord has_one :book has_many :books end ``` userが持つbookが複数ある場合にhas_oneを見ると、最新のbook一個だけが得られた ```rb user.books.size # 3 user.book # Return latest book instance a user has ``` # Original by Github issue https://github.com/YumaInaura/YumaInaura/issues/2941