Just do IT

思うは招く

Rails

【Rails】テーブルのカラムに後からコメントを追加したいときの方法

たとえば、usersテーブルのhoge_idというカラムにコメントをつけたいとき。 bin/rails g migration AddCommentsToUsers class AddCommentsToUsers < ActiveRecord::Migration[6.1] def change change_column_comment :users, :hoge_id, 'some comment here' …

Rails delegate の挙動

Active Support コア拡張機能 - Railsガイド Railsガイドに書いてあるサンプルを解釈してみる。 たとえば、UserモデルとProfileモデルがある。 Userモデル Profileモデル UserはひとつのProfileを持つ。 # id :integer not null, primary key # name :string…

annotate gem 使い方

ctran/annotate_models: Annotate Rails classes with schema and routes info annotate gemとは、モデルファイルに以下のようなスキーマ情報を記述してくれるgem。好き嫌いはあるようだけど、いちいちスキーマファイルを見に行かなくて済むので個人的には好…

railsコマンドを叩いてもターミナルが固まって動かない場合の対処

springをstopしてみる。 spring stop 参考 rails generate devise:install does nothing - Stack Overflow

Railsコンソールでバリデーションを一時的に無視してデータをsaveする方法

状況: エラー再現のため、rails cで開発環境にあるデータをいじくりたい でもどこかでバリデーションがかかっていて保存できない 今だけバリデーションを無視して保存したい いろいろ方法はあるが、save(validate: false)を使うといけた。 article = Articl…

Railsでメールアドレスのバリデーションをするときに使える URI::MailTo::EMAIL_REGEXP

URI::MailTo::EMAIL_REGEXPとは、Railsでメールアドレスのバリデーションをするときに使える正規表現の標準ライブラリ。 使用例: validates :email, format: { with: URI::MailTo::EMAIL_REGEXP }, uniqueness: true ソースコードを見てみるとこんな感じ。 …

RubyMine でコントローラーに該当するViewファイルやルーティングへジャンプする方法

やりたいこと RubyMine上でコントローラーを編集していて、「このコントローラーに該当するViewってどれなんだろうなー?」「ルーティングどこにあるんだろ?」というときに該当ファイルへジャンプしたい。 方法1 コントローラーファイルにある小鳥みたいな…

Rubocop に IdenticalConditionalBranches で怒られて解消した

Rubocop 警察にこんなふうに怒られた。 Style/IdenticalConditionalBranches: Move (指摘されたコード) out of the conditional. それはコントローラーにこんなコードを書いていたときのこと。(コントローラーにif文を書くかどうか議論は一旦無視してくださ…

Railsガイド「Active Record コールバック」を読んだメモ

Active Record コールバック - Railsガイド コールバックとは 「オブジェクトが、こんな状態になったらこのメソッドを呼び出してねー」と設定するときのメソッドのことをコールバックと呼ぶ。バリデーションもコールバックのひとつ。 Active Recordオブジェ…

Railsガイド「Active Record マイグレーション」を読んだメモ

Active Record マイグレーション - Railsガイド を読んだメモです。 マイグレーション名が"AddColumnToTable"や"RemoveColumnFromTable"で、かつその後ろにカラム名や型が続く形式になっていれば、適切なadd_column文やremove_column文を含むマイグレーショ…

Rails before_xxx で throw(:abort) をする意味

before_save とは オブジェクトがsaveされる前に発動されるコールバック 引数としてメソッドが渡された場合、それをクリアしないとsaveされない バリデーションの一種 Rails 4 での仕様 before_xxx では、false を返した場合のみ保存処理が停止していた nil …

RSpecが落ちているときにやること

1、落ちてるspecだけ実行できるように、itをfitにする fit "テストだよ" do end filter_run_when_matching - Filtering - RSpec Core - RSpec - Relish 2、RSpecのログをみれるようにする $ tail -f log/test.log ディベロップメントモードのログと同様に、…

rails の reload メソッドは何をしているのか

reload the record and clears changed attributes. 変更された属性をクリアして、もともとのレコードをリロードする。 api.rubyonrails.org > user.name => "kota" > user.name = 'hogehoge' => "hogehoge" > user.reload User Load (0.1ms) SELECT "users"…

Ruby や Rails でよく見る、メソッド名の後ろのびっくりマーク(感嘆符)の意味

Rubyだと 基本的には、破壊的な変更を意味する。呼び出したオブジェクト側も変更してしまう。 $ irb > str = 'hoge' => "hoge" #普通にupcaseする > str.upcase => "HOGE" #呼び出したオブジェクトに変更はない > str => "hoge" #破壊的に変更する > str.upc…

パーフェクトRails で勉強してて No route matches [POST] "/auth/github"エラー

Github認証をしたかったのだが、/auth/githubにアクセスしてもルーティングがないと怒られる。omniauth を入れており、ルーティングはよしなにやってくれるはずなので、routes.rb になにか書き込む必要はない。 結論としてはポカミスで、omniauth.rb をconfi…

Rails の dependent: :restrict_with_exception について調べた

先に結論: restrict_with_exceptionオプションとは: 親レコードを削除するとき、子レコードがある場合はActiveRecord::DeleteRestrictionErrorが発生して削除できない 子レコードを先に削除しないと、親レコードを削除できないオプションのこと 詳細 Rails…

Rails で ER図 を自動生成してくれる gem rails-erd

voormedia/rails-erd: Generate Entity-Relationship Diagrams for Rails applications 使用するには Graphviz が必要 brew install graphviz pdf出力も可能 group: :development に追加 group :development do gem "rails-erd" end 以下コマンドで現在いるR…

seed-fu gem を使ってみる

seed-fu という gem に触る機会があったため、どんなものかサンプルを動かしてみた。 seed-fu とは mbleigh/seed-fu: Advanced seed data handling for Rails, combining the best practices of several methods together. Rails デフォルトのseed機能だと、…

Rubocop Rails/UnknownEnv 警告の対処

Rails で Rubocop を走らせたところ、以下の警告が出た。 Rails/UnknownEnv: Unknown environment staging?. if Rails.env.production? && Rails.env.staging? Rails.env.staging?という部分の記述に関しての警告で、staging 環境を認識してくれていないよう…

rails db:rollback → マイグレーションファイル修正 → マイグレート再実行の流れ

ロールバック怖い。でもやらなければ・・・ ロールバックの手順をメモした。 背景 logsテーブルの id を uuid に変更したい でもすでに logs テーブルは作っちゃった 幸い、ひとつロールバックすればまだ戻せる DB は postgresql を使用 今の DB バージョン…

Rails + PostgreSQL で id を uuid に変更したい

モデル作成時に設定する手順 $ rails new uuid-test -d postgresql $ cd uuid-test データベース作成。 $ rails db:create モデル作成。 $ rails g model User name:string マイグレーションファイルを修正。 class CreateUsers < ActiveRecord::Migration[6…

Rails テーブルのカラムをユニークにしたいときのマイグレーション

モデルの属性を一意にしたい場合はuniqをつける。 rails g model User name:string email:string:uniq

【Rails】カラムに not null 制約を後から設定したい

change_column_nullメソッドが使える。 change_column_null :products, :name, false Active Record マイグレーション - Railsガイド

Mac の kindle アプリで mobi 形式の書籍を見る方法

以下のディレクトリで mobi 形式のファイルを設定し、Kindle を再起動する。 /Users/ユーザーネーム/Library/Containers/com.amazon.Kindle/Data/Library/Application Support/Kindle/My Kindle Content パスは「Kindle」→「設定」からでも確認・変更ができ…

Ruby の any? メソッドの動き

Rubyのany?とは配列に対して、要素がどれかひとつでも条件に合致したら真を返すメソッド。 すべての要素が偽である場合に false を返します。真である要素があれば、ただちに true を返します。 ブロックを伴う場合は、各要素に対してブロックを評価し、すべ…

Ruby で月末、月初を取得

require "date" #月末 p last_day = Date.new(2020, 8, -1) #月初 p first_day = Date.new(2020, 8) $ ruby dates.rb #<Date: 2020-08-31 ((2459093j,0s,0n),+0s,2299161j)> #<Date: 2020-08-01 ((2459063j,0s,0n),+0s,2299161j)> 日付が入った配列を作りたい場合。 dates = [] (first_day..last_day).each do |date| dates << date end puts da…</date:></date:>

Ruby で RSpec のセットアップ

勉強用のためにRSpecをセットアップしたい場合の手順。 $ md rspec-setup $ cd rspec-setup $ bundle init #追加 gem "rspec" $ bundle install $ bundle exec rspec --init specファイル(テストファイル)を作成。 $ touch spec/say_spec.rb spec/say_spec…

Ruby の merge の挙動

たとえば、こんな2つのハッシュがあるとする。 smart_phones = { apple: :iphone, google: :pixel, samsung: :galaxy, } other_smart_phones = { huawei: :p30, sharpe: :aquos } これらのハッシュをがっちゃんこしたい場合、mergeメソッドを使える。 puts s…

webpack-dev-server をしたら Chrome でHTTP431エラー

問題 webpackで開発用サーバー(webpack-dev-server)を立ち上げたとき、Chromeで「このページは動作していません。HTTP 431 エラー」と出て何も表示されなかった。Safariなど他のブラウザでは問題なく動く。 解決 Chromeの設定からCookieを削除することで解…

Rails で日付の取得をする

今の日時を取得 月末、月初を取得 前日、翌日 30日前、30日後 1ヶ月前、1ヶ月後 1年前、1年後 Date.today と Date.current の違い 参考 今の日時を取得 #Railsなら $ rails c #Rubyなら $ irb require 'active_support/all' #Railsの場合は不要 irb(main):00…