ウェブエンジニア珍道中

日々の技術的に関する経験を書いていきます。脱線もしますが助けになれば幸いです。

Rails

docker-composeでのRails環境にElasticsearchを組み込む

dockerを用いたRailsの開発環境に新たにElasticsearhを組み込んだのでまとめます。 Dockerの設定 docker-compose.ymlを以下のように修正します。 version: '2' services: rails: # ~ imageとか元々の設定(省略) ~ # 追加 depends_on: - elasticsearch # 追…

Railsで特定のModelだけ別DBを操作するようにしてみた

システム間連携等の事情で、別DBを作ってデータを流し込みたくなったので実装してみました。 手順 例としてBookモデルを作り、別DBを対象にするようにします。 環境はmysqlです。元々使っているDBはmain_database、新しく使うDBはsub_databaseという名前にし…

Rubyのtapメソッドが便利なので紹介する

RubyのObject#tapが便利だったので紹介します。(昔からあるらしいけど) tapメソッドとは ブロック文を渡すと中身の処理を走らせてレシーバを返すメソッドです。 hoge = "test".tap do |string| puts string true end puts hoge # "test" Objectクラスに定…

RailsでSlimを使った時に起こる「開発環境だけ見た目が崩れる問題」の解消

問題について https://github.com/slim-template/slim-railsを使って開発をしていると、特定の条件で開発環境下(development)でのみ見た目が崩れる減少が起きていました。 長らく原因がわからず解消できませんでしたが、先日ようやく何とかできたので紹介…

RubyでURLをaタグに書き換える処理を書いた

DBから取ってきた文字列を表示する際に、URLが混ざっていた場合aタグに置き換えて表示する必要があったためその処理を書きました。 コードはこんな感じです。 require 'uri' def convert_url_into_a_tag(text) text.gsub(URI.regexp(['http', 'https'])) do …

RailsのActiveRecordでcreate_or_updateを分岐なしでスマートにする方法

最近見つけたので紹介します。 今回は本(Book)モデルを例題にします。 方法 こんな感じでできます。 book = Book.find_or_initialize_by(id: 1) # book = Book.find_or_initialize_by(name: "こころ") # idじゃなくてもOK book.update_attributes( name: "…

Railsでテスト用DBのテーブル定義が開発環境と違う時に打つコマンド

最近RSpecを使ってテストコードを書いてます。それで開発環境でdb:rollbackとか色々していたらテスト用のDBと内容がズレてきてしまい、「えーい、今の開発環境に合わせんかい!」という時に打つと良いコマンドを見つけたのでメモ。 Rails5 bundle exec rails…

Rails5でnested attributesに詰まった話

早速Rails5を触ってると、nested attributes周りで詰まったので紹介します。 症状 全ての項目を入れてもバリデーションに引っかかって保存できない。 モデル ここではモデル名をParent, Childとします。 class Parent < ApplicationRecord has_many :childre…

ActiveRecordのwhereメソッドで大文字小文字を区別する方法

Account.where("name = binary ?", "HOGE") でいけた。 要領はmysqlと同じだった。 大体のことはやってくれるけど、 こうやって役に立つからSQLもしっかり勉強しておかないとなー思いました。