無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

ActiveRecordで検索-find_by_*

find_by_*で属性を条件にデータを検索できます。

find_by_*
属性を条件にして、それにマッチする最初のデータを取得
find_all_by_*
属性を条件にして、それにマッチするデータをすべて取得

データ

テーブル定義:

CREATE TABLE kittens (
  id int(11) NOT NULL auto_increment PRIMARY KEY,
  name VARCHAR(255),
  color VARCHAR(255),
  age int(4)
);

データ:

mysql> select * from kittens;
+----+-------+-------+------+
| id | name  | color | age  |
+----+-------+-------+------+
|  1 | mii   | gray  |    1 |
|  2 | tora  | brown |    2 |
|  3 | kuro  | black |    1 |
|  4 | shiro | white |    3 |
+----+-------+-------+------+
4 rows in set (0.00 sec)

find_by_*

Kittenの属性を条件にして、マッチする最初のデータを取得します。「*」には属性名が入ります。また「find_by_hoge_and_foo」のような感じで条件を結合することも可能です。(ただし「and」での結合のみ)

class Kitten < ActiveRecord::Base
  def to_s
    return name
  end
end

#戻り値はKitten
puts Kitten.find_by_name("mii")
puts Kitten.find_by_age(2)

# findのオプションも使える。
puts Kitten.find_by_age(1, :order=>"name DESC")
puts Kitten.find_by_age(1, :order=>"name ASC")

# andで結合することも可能。orはエラーになる。
puts Kitten.find_by_age_and_name(1, "mii")
puts Kitten.find_by_age_or_name(1, "mii")

出力:

mii
tora
mii
kuro
mii
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1196:in `method_missing': undefined method `find_by_age_or_name' for Kitten:Class (NoMethodError)
	....

find_all_by_*

Kittenの属性を条件にして、マッチするすべてのデータを取得します。

#戻り値はKitenの配列
puts Kitten.find_all_by_name("mii").join(",")
puts Kitten.find_all_by_age(1).join(",")

# findのオプションも使える。
puts Kitten.find_all_by_age(1, :order=>"name DESC").join(",")
puts Kitten.find_all_by_age(1, :order=>"name ASC").join(",")

# andで結合することも可能。orはエラー。
puts Kitten.find_all_by_age_and_name(1, "mii").join(",")
puts Kitten.find_all_by_age_or_name(1, "mii").join(",")

出力:

mii
mii,kuro
mii,kuro
kuro,mii
mii
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1196:in `method_missing': undefined method `find_all_by_age_or_name' for Kitten:Class (NoMethodError)
	....