hotoolong's blog

RailsやVim、業務で気になったことを綴ってます

Rails

orderで特定の文字列順に並び替える

数字順で昇順、降順で並び替えるのはよくありますが、 カラムに文字列を設定してしまっていると、並び替えたくなったときにすこし不便ですね。 そんなときにはfieldを使うとうまく並び替えれます。 select id, name from items order by field(items.size, '…

Railsのmigrationでchange_columnを利用する

change_column change_column_null change_column_comment change_column_default change_column Railsのmigrationでカラムの情報を変更したい場合によく使うchange_columnですが、 change_column(table_name, column_name, type, options = {}) と変更した…

ActiveRecordでOR文を作るときのエラー対処

少し複雑なSQLのOR文をActiveRecordで作るときにはすこし億劫になりますね。 ArgumentError: Relation passed to #or must be structurally compatible. Incompatible values: [:joins, :references] とエラーが出てしまったのでいろいろ調べてみました。 今…

CIでbundle install するときには --clean をつけると無駄にキャッシュされない

タイトルどおりなのですが、 目からウロコだったので、メモとして残しておきます。 Circle CI 2.0 でstore_cache、 restore_cache を使って、Bundler の gem をキャッシュしていたので、 とても参考になります。 ローカル環境でも --clean を付けてもいいの…

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</capybara::node::element>…

rails server の 引数備忘録

気づけばもう3月ひな祭りですね。 デバックのため、ステージングのサーバを手で上げたくなったときに引数がわからなくなったので ほぼドキュメントなのですが、備忘録として残しておきます。 rbenv exec bundle exec rails s -e staging -p 8080 みたいにし…

Accept: */*; で MissingTemplateになってしまうのを防ぐ

topページヘのアクセスでたまに変なExceptionが出てたのです。 ActionView::MissingTemplate (Missing template pages/top, application/top with {:locale=>[:ja], :formats=>["*/*;"], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :c…

Rails4.2でlike句のサニタイズをする

2016年はじまってもう2月になってしまいました。 遅ればせながら、あけましておめでとうございます。 昨年から相当ハードなスケジュールでなかなかブログが書けてないですが、 今年はもう少し書く時間を確保したいところ。 頑張ります。。 今日のお題は SQL…

Railsバージョンアップメモ

4.2系も続けてバージョンアップされているので ココらへんでメモ やることは Gemfileのrailsバージョン変更 bundle update bundle install ./bin/rake rails:update テストを流してエラー箇所を修正 bundle updateはまとめて gemのバージョンを上げてしまう…

unicornに移行メモ

Apache → Passenger 環境 を unicorn に入れ替える Gemfileに gem 'unicorn' を追加 bundle installする bundle binstubs unicorn で unicorn、unicorn_rails を bin配下に作成 init.dに起動シェル作成しておいて ${RAILS_ROOT}/bin/unicorn_rails -c config…

each_sliceを使って簡易カレンダーを作成

仕事が忙しくなってきました。少し大変です。 少しのアイドルがある環境で過ごしたいなと贅沢なことを考えながら、 周りからモチベーションを落とされるというよくわからない状況を奮起しながら程良く頑張っています。さて本題です。 最近カレンダーを出力し…

大小比較でどちらかの値と取りたい場合のコーディングパターン

Ruby(Rails)で大小比較してどちらかの値と取りたい場合にどうやって書くのか という素朴な疑問なのですが、 最近私の中でのトレンドがありまして、 比較しながら検証していきたいと思うのです。 前提条件 例えば、日付型の2変数が用意されていて、小さい値を…

find_in_batchesとupdate_allで大量のレコードを分割処理する

最近はバックエンドの処理を捌く場合に、Railsを意識してるとなかなかパフォーマンスが出なかったのが、 find_in_batchesとupdate_allの組み合わせで意外とパフォーマンスが出たので、メモメモ。今回の件は、かなりデータ数が多くなりすぎて絞り込んでもLock…

ActiveRecord::Base#find_in_batchesを使ってみた

Railsでバッチ処理したい時に既存の ActiveRecord::Base#findを使いたいけど、処理件数が多くなりすぎるとメモリ食い過ぎて大変。 なんてことになりそうな場合は、今まではActiveRecord::Base#connectionで直接SQL文を実行してました。 ActiveRecord::Base#c…

Rubyでマルチバイト文字数を確認する

仕事でRuby1.8、Rails2.3とか使ってます。たとえば、30文字以上はカットとかバイト数でじゃない場合、 マルチバイトを文字数でカットしたいときにいいものを教えてもらったので、メモメモ ActiveSupportを利用 Railsの場合ですが、結構簡単にマルチバイト対…