vim-gitgutterでGitコマンドを使う
今更ながら「20年目のRubyの真実」を読んだ
CIでbundle install するときには --clean をつけると無駄にキャッシュされない
タイトルどおりなのですが、 目からウロコだったので、メモとして残しておきます。
Circle CI 2.0 でstore_cache、 restore_cache を使って、Bundler の gem をキャッシュしていたので、 とても参考になります。
ローカル環境でも --clean を付けてもいいのかもしれないですが、 ブランチの切り替え時に毎回インストールしないといけなかったりが多発するようであれば 時々claenしてあげるのがいいのではないでしょうか。
MySQLのgroup_concatをつかって複数の項目を1行に並べる
1対多のテーブル構成を多になっているテーブルの情報をgroup_concatを使って表示したくなるケースがあったのですが、 単純に1カラムのデータだけを表示する場合はそのまま使えばいいのですが、 複数を一気に選択することができず、副問合せして取得しました。
usersテーブル、user_optionsテーブルがあるとして 普通にgroup_concatを使ってオプションの名前を登録順に取得するケースは以下になります。
select users.id, group_concat(distinct user_options.name order by user_options.created_at separator ', ') from users left outer join user_options on user_options.user_id = users.id
これに対してuser_optionsの複数の項目(nameと登録日)を追加したい場合は joinしてるテーブルを副問合せしてしまって以下のようにしました。
select users.id, group_concat(distinct user_options.name_created_at order by user_options.created_at separator ', ') from users left outer join ( select id, concat(id, '(', date_format(convert_tz(created_at, '+0:00','+9:00'), '%Y-%m-%d'), ')') as name_created_at, created_at from user_options ) user_options on user_options.user_id = users.id
このようにすることで,区切りで名称(登録日)の情報が1行で表示されるようになります。 力技なのであまり参考にならないかもしれないですが、表示させるのに困ったときには使ってみて下さい。
Capybaraでselect時に同じ名称のvalueがありエラーになってしまう
RSpecでCapybaraのテストをしてたのですが、
select '東京都', from: '都道府県'
と記載している箇所で
Capybara::Ambiguous: Ambiguous match, found 2 elements matching visible option "東京都" within #<Capybara::Node::Element tag="select" path="/html/body/div/div/div[3]/div[2]/div/div/form/div[8]/select">
のようなエラーが出てしまいました。
FactoryBotの記載方法が悪かったようで、同じ東京都が2つできてしまったのですが、 改善方法としてはいくつかあります。
1点目としては
特に同じ名称でどちらも使っても問題ない場合
select '東京都', from: '都道府県', match: :first
とspecを修正することで免れることができます。 これはシンプルですね。
2点目としては FactoryBotで同じ名称を作りたく無いケース
FactoryBot.define do factory :prefecture do id 13 sequence(:name) { |n| "東京都-#{n}" }
とsequenceを利用するとnにインクリメントされた数値が代入されまwす。 このように記載すると上手く行きますね。
本質的な問題として rails_spec.rb に固定させるデータを beforeで作ってしまうというのもいいのかもしれませんが、 今回はそれ以外の対処方法を考えてみました。
imagemagickのエラーでRSpecが落ちる
RSpecに画像アップロードのテストが含まれているのですが、 軒並みバリデーションエラーになってました。
ActiveRecord::RecordInvalid: バリデーションに失敗しました。 プロフィール画像MiniMagickがファイルを処理できませんでした。画像を確認してください。エラメッセー...279. identify: no decode delegate for this image format `JPEG' @ error/constitute.c/ReadImage/509.
あまり見に覚えがなかったのですが、最近brewで痛い目に合ってるので、Updated Formulaeの巻き添えを食ったのかとおもい
brew upgrade imagemagick
しておきました。
brew info imagemagick imagemagick: stable 7.0.7-28 (bottled), HEAD Tools and libraries to manipulate images in many formats https://www.imagemagick.org/ /usr/local/Cellar/imagemagick/7.0.5-4 (1,522 files, 22.6MB) Poured from bottle on 2017-04-03 at 12:58:14 /usr/local/Cellar/imagemagick/7.0.7-28 (1,526 files, 23.2MB) * Poured from bottle on 2018-03-30 at 20:43:27 From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/imagemagick.rb
再度 spec を実行するとうまくいきました。怖いですね。。