Ruby

DataMapperでPostgreSQLのILIKE演算子を実装する

PostgreSQLのLIKE演算子は大文字と小文字を区別します。そこで大文字と小文字を区別しないための演算子として「ILIKE」という演算子が用意されています。しかし、ORMはILIKE演算子を実装していない、結局力づくで直接SQLを発行しないとILIKE演算子を利用でき…

DataMapperのcountが遅い

約4万件ほどデータが格納されているデータベースに対してcountを呼ぶと数秒もかかるので、調べてみました。 require 'dm-core' require 'dm-migrations' require 'benchmark' class Test include DataMapper::Resource property :id, Serial property :numb…

Sinatraでhtmlのescape

SinatraでHTMLをエスケープ(escape)する方法です。 ヘルパーメソッドでRack::Utilsをincludeします。 helpers do include Rack::Utils alias_method :escape, :h end ビューテンプレートで以下のように記述します。 <%= h scary_output %> 参考:Sinatra: …

Rubyのprivateとprotectedの違いについて

privateとprotectedはそのクラスと派生クラスからしかアクセスできないことは当然ですが、ではその中でどう違うのかをよく分かっていなかったので調べました。 基底クラスは3つのアクセス修飾子を持つようにして、派生クラスからそれぞれのメソッドを呼び出…

クラス変数とクラスインスタンス変数とインスタンス変数の違いについて

Ruby Way 第2版を読んでいきなりつまづく。 P46 class Myclass @x = 1 # クラスインスタンス変数 @y = 2 # 別のクラスインスタンス変数 def mymethod @x = 3 # インスタンス変数 # ここで@yにアクセスすることはできない end end これのなにが分からなかっ…

単純な整列アルゴリズム

バブルソート O(n^2) 安定 # 配列の後ろから先頭に向かってスキャンしていき、 # もし隣り合う2つの要素の大小関係が逆だったら、それを入れ換える def bubble_sort( arr ) (arr.length-1).times do |i| j = arr.length-1 while i