ruby

【Ruby】ActiveRecordのAssociationにメソッドを追加する

ActiveRecordのhas_manyとかbelongs_toとかのAssociationはブロックを渡してメソッドを追加することができます。 class User has_many :blogs do # ステータスがopenのものを取得する def open where(status: 'open') end end end こんな感じで、ブロックの…

【Rails】belongs_toで紐付けたモデルの存在チェック

belongs_toで紐付けたモデルが本当にデータとして存在するかどうかをチェックする。 class Blog has_many :comments end class Comment belongs_to :blog end 例えば、このようなモデルがあった時、Blogモデル経由でCommentを作成した場合は、すでにBlogは存…

【ruby】rakeのデフォルトタスクを変更する方法

Rakefileに記述する Rakefileに記述して指定します。 task default: :about この様に書くと、タスクを指定せずrakeコマンドのみを実行した時にrake aboutと同じ挙動になります。 taskは複数設定することも可能です。 task default: [:about, :routes] about…

【Rails】migrationのchangeとup/downって何が違うの?

Railsでmigrationを作成する時、changeメソッドだけが定義されていたり、upとdownメソッドの2つが定義されている時があります。 class AddColumnHoge < ActiveRecord::Migration def change end end class ChangeColumnHoge < ActiveRecord::Migration def u…

【ruby】ActiveModelを使ってDBと関係ないFormを作成する【Rails】

RailsでFormを扱う時は、Modelと紐付けることで、validationなどの設定はModelに書くことができ、非常に便利です。 ですが、DBと関係ない場合は紐付ける対象のModelが生成されていません。 そこで使用するのがActiveModelです。 https://github.com/rails/ra…

【ruby】Railsでファイルアップロードをテストする

Rack::Test::UploadedFileを使用します。 http://rdoc.info/github/brynary/rack-test/master/Rack/Test/UploadedFile インスタンスを生成する際に、第一引数にファイルのパス、第二引数にcontent-typeを指定します。 Rack::Test::UploadedFile.new("/path/t…

【ruby】ブロックの変わりにProcオブジェクトを引数に渡す

ブロックを渡すようなメソッドは、Procオブジェクトを引数として渡すことも出来ます。 普通にブロックを渡すとこんな感じ。 hoge = %w(foo bar piyo) hoge.each do |val| puts val end これをProcオブジェクトを引数として渡すとこんな感じになります。 hoge…

RubyでExcelファイルからデータを取り出す

よく、マスターデータをExcelで管理してプログラムで一気にImportする、というようなことをするので、RubyからExcelファイルのデータを取り出す方法をまとめます。 spreadsheetを使用する spreadsheetというgemが公開されているので、こちらを使用します。 h…

Rails4で条件付きのリレーションを設定する方法

Rails4になってから指定方法が変わって、探すのに苦労したのでメモっときます。 Rails3の場合 has_many :hoge, :conditions => "status = 1" Rails4の場合 has_many :hoge, -> { where(status: 1) } 『->』ってなんだ これはruby1.9から、lambdaをこういうふ…

Rubyから複数の音声ファイルを繋げる

Rubyから複数の音声ファイルを繋げる方法をまとめます。 soxを使用する CUI上で音声ファイルを扱う時に便利なツールとして、soxがあります。 http://www.hcn.zaq.ne.jp/___/unix/sox-ja.html http://sox.sourceforge.net/sox.html このsoxを使用します。 イ…

RMagickを使ってサムネイル画像を作成する

2週連続でrmagickネタです。(rubyのネタがない...) image = Magick::ImageList.new('/path/to/file') # width: 200, height: 200の画像にリサイズ image.resize(200, 200).write('/path/to/thumbnail') ImageListを生成した後に、resizeメソッドで画像をリ…

ビット演算でフラグを管理する

複数のフラグを管理したい場合、いちいちDBに専用のカラムを追加していくのはめんどくさいです。(もちろんそのフラグで絞り込みたい場合は別ですが。) ビット演算でフラグを判定する ビット演算でフラグを判定すれば、フラグの管理がスリムになります。 FL…

RMagickを使って透過pngを重ねて合成する

例として、0.png ~ 9.pngまでの透過pngが用意されていて、それを重ねて1枚の画像に出力する。 require 'RMagick' image = nil 10.times do |num| # 画像データを読み込む tmp_image = Magick::Image.from_blob(File.read("/path/to/#{num}.png")).first # im…

能年玲奈の情報をいち早くキャッチしたいからPUSH通知で知らせるようにした

通知周りはim.kayac.comに任せました。https://github.com/tanihiro/nonen-rena-notification## 設置方法(簡単3ステップ) git clone im.kayac.comのアカウント情報を記入 cronを設定 現在は、公式サイトと事務所サイトのニュースを一時間ごとにチェックし…

郵便番号から住所を取得するgemを作った

https://github.com/tanihiro/zip-code-jp最近業務で、よくある住所入力のFormで郵便番号から住所を取得するためのAPIを作ることがあったので、なんだったらその部分勉強がてらgemにしちゃおう、ってことで作った。DBを使うまでも無いと思ったので、住所デー…