letter_openerをWSL環境で使う方法

メールのプレビューをブラウザ上で表示できるGEM open_letterですが、デフォルトのWSL環境のUbuntuではlaunchyがエラーを吐いて終了してしまいます。少し設定をしておけば問題なく使えるのですが、毎回その設定方法を忘れてしまうのでメモっておきます。 ...

2022-10-27 · ironsand

Object#present?や#blank?でinvalid Byte Sequence in UTF 8になる時の対処法

Rails でObject#present?やObject#blank?でArgumentError: invalid byte sequence in UTF-8が出て少し困ったのでその原因と対処法を残しておきます。 ...

2022-06-17 · ironsand

PostgresqlのCardinalityViolationエラーの解決方法

Rails6で実装されたActiveRecord#upsert_allでバルクアップデートをしようとすると ActiveRecord::StatementInvalid: PG::CardinalityViolation: ERROR: ON CONFLICT DO UPDATE コマンドは行に再度影響を与えることはできません HINT: 同じコマンドでの挿入候補の行が同じ制約値を持つことがないようにしてください とエラーが出たけどCardinalityViolationの意味がわからなかったので調べてみました。 ...

2022-06-07 · ironsand

Railsの環境によってSeleniumで使うブラウザを変える

スクレイピングをする時に使うブラウザをRailsの開発環境と本番環境で切り替えたかったので方法を記録しておきます。 ...

2021-05-22 · ironsand

has_oneでhas_manyの最新のレコードを取得する方法

たとえばUserモデルがhas_manyでArtWorkを持っているときに、最新のArtWorkをhas_oneでも持ちたい場合の実装方法を解説します。 ...

2021-02-05 · ironsand

WebStormにあってRubyMineに存在しない機能

現在Railsの開発にRubyMineを使っているんだけど、Nuxtなどを触るためにJS専用のWebStormを買うべきか迷ってたので機能の違いを調べてみた。 ...

2019-10-27 · ironsand

spring が原因で rails server が動かない時の対処法

undefined method 'application' for Rails:Moduleというエラーが出るので対策を調べました。springが原因だったようです。 ...

2019-05-21 · 鉄

simple_formatを適用させるとauto_linkの target: ‘_blank’が効かない

状態 こういうふうに書いたらtarget: '_blank'が効かなくて困った。 simple_format(auto_link(text, :target => "_blank" )) 対策 simple_formatはaタグのtarget属性を取り除いてしまうので順番を入れ替えて、こう書くとOK。 auto_link(simple_format(text), :target => "_blank" ) 参考 https://github.com/tenderlove/rails_autolink/issues/20#issuecomment-24818734

2017-11-01 · 鉄

複数のカラムの値が重複するオブジェクトのIDを取得する

複数カラムの値が重複してるオブジェクトの情報を取るために posts = Post.select(:title, :user_id, :date).group(:title, :user_id, :date).having("count(*) > 1").all とするとこんな感じのidがnilの配列が返ってくるので :id => nil, :user_id => 1345, :title => 'foo', :date => Tue, 01 Sep 2015 posts.each do |post| duplicated_posts = Post.where(user_id: post.user_id, title: post.title, date: post.date) # なんか処理する end な感じで適当に処理しましょう。 追記 こちらのほうがスッキリ書けますね。 posts.each do |post| duplicated_posts = Post.where(post.attributes.except('id')) # なんか処理する end

2016-03-30 · 鉄

Hashのキーをリネームする

Hashのキーをリネームしたかったけどデフォルトのメソッドはないようなので書いた class Hash def rename_key(old:, new:) return unless has_key?(old) return if has_key?(new) self[new] = self.delete(old) self end end 使い方 h = {a: 1, b: 2} { :a => 1, :b => 2 } [92] pry(main)> h.rename_key(old: :a, new: :c) { :b => 2, :c => 1 } 変更前のキーが存在しない時と、変更後のキーが存在する時は何もしない。 実際の入れ替え処理はself[new] = self.delete(old)だけで終わってます。 参考 http://kmckelvin.com/blog/2014/06/renaming-items-in-a-ruby-hash

2016-02-15 · 鉄