deep_rejectが欲しくてrefinementsで実装しようとした話

再帰的に条件判定を行うrejectが欲しくなりました。
こういう動きです。

1
2
3
4
5
6
7
8
[1,2].deep_reject{|val| val == 1 }  # => [2]

[1,2, [1,2,3]].deep_reject{|val| val == 1 } # => [2, [2, 3]]

[1, 2, {a: "a", b: "b" }].deep_reject{|key, val| key == :a } # => [1, 2, {:b=>"b"}]

[1, 2, {a: "a", b: "b", c: {a: "c", c: "d"} }].deep_reject{|key, val| key == :a }
# => [1, 2, {:b=>"b", :c=>{:c=>"d"}}]

かなり便利そうです。

Read on →

モデルのattributeに変更がなくてもnested_attribute_forを使っているモデルでcallbackを発生させる

任意の条件でnested_attribute_forの対象の保存処理を走らせる方法です

ファイルのアップロード用のモデルを作っていてActionDispatch::Http::UploadedFileを一旦attr_accessorのアクセサで受けたあとcallbackでファイル名やファイルサイズをmodelクラスの該当のカラムに設定するという処理を書いておりました。

ファイルは可変にアップロードしたかったのでこのモデルの親モデルから参照するようにして、nested_attribute_forで親モデル更新時に一緒に更新するようにします。

1
2
3
4
5
class Oya < ActiveRecord::Base
  has_many :files, dependent: :destroy

  accepts_nested_attributes_for :files, allow_destroy: true
end
1
2
3
class File < ActiveRecord::Base
  attr_accessor :file
end
Read on →


Rails Engineを使った開発

一つ前に携わったプロジェクトではサブシステムがたくさんあり、それぞれがrailsで構築されていて共通処理やmodelはrails engineにあつめられ各システムで参照しておりました。

今までgemのコードリーディングをする時にしか意識していなかったrails engineですが(deviseとかとか)、結構便利だということを今更ながら実感し、最近は共有処理をengineに書き出してそれを参照するようにしています。

クックパッドさんでも共通部分をengineに集めているようです。
新規サービスの管理画面を短期間で見栄え良く実装する

ドリコムさんでは複数のengineを組み合わせてシステムを作っているようです。
Mountable Engine だらけの Rails アプリ開発

Read on →

Railsでbootstrap datetimepickerを日本語化しつつ導入(with rails assets)

普段はよくbootstrap-datepickerを使うのですが、 今回の案件では時刻まで絞り込みたいというお話だったのでdatetimepickerを導入してみました。

こちらを使います。かなり高機能な上に日本語化まで対応できる優れもの。
Eonasdan/bootstrap-datetimepicker

デモを見るだけでもワクワクしますね。
入れ方もたくさん用意されていていいですね。
今回もrails-assetsで導入します。

Read on →

pecoでctrl+jとctrl+kで上下移動

pecoをランチャーとして使っているのですが、
メニューを呼び出した後ホームポジションから手を離して矢印キーに指を運ぶのが嫌でctrl+jとctrl+kで移動できないかと思っていたら会社の人にやり方を教えてもらいできました。

具体的にはpecoのキーマップを使います

Read on →

Railsでbootswatch導入(with rails assets)

管理画面を作るにあたってbootstrapだけで1から作るのもしんどかったので、フリーのbootstrap用テンプレートbootswatchを使って管理画面を作ってみたいと思います。

導入には以下4パターンがあるかと思います。

  1. bootswatch-railsなどのGemを使う
  2. bowerで入れる
  3. rails-assetsで入れる
  4. サイトからダウンロードしてassets下に配置する

今回はrails-assetsで導入してみました。

Read on →

RailsでIE8の対応(with rails assets)

IE8も推奨ブラウザに含めるプロジェクトに関わることになったのでrails-assetsを使ってIE8に対応していきたいと思います。

やることとしては以下の感じですかね。

  • jquery1.x系の導入(今回は1.9.1)
  • html5shiv.jsの導入
  • respond.jsの導入

テンプレートエンジンはslimを使います。

Read on →


今日 嫁にホワイトデーのお返しをしたよ

嫁のホワイトデーのお返しがようやく届きました。

かわいいマウスパッドというリクエストでしたが、探したけどかわいいマウスパッドがあまりなくどうしたものかと思ってましたが、 商品を自由にカスタマイズできる Zazzleというサービスがとても良さそうだったのでこれを利用しました。

オーダーが3月9日。銀行振込も同日に行いました。
振込確認したので作りますメールが12日にきて、13日に発送しますメールがきました。
アメリカからの発送なので少し日数がたった3月16日に家に届きました。
でも実際には仕事で受け取れず、受け取ったのは今日です(^^;)

こんな感じのマウスパッドが届きました! 素晴らしい出来!

何か記念品を贈りたくなったらまた利用しようと思います。