Between句を生成する場合は、対象となる列に範囲式を設定することで対応できる!これってとても素敵だなぁ。
[sourcecode language="ruby"] if params != nil
…
shiharaibi_from = get_date('shiharaibi_from')
shiharaibi_to = get_date('shiharaibi_to')
condition = Hash.new
add_item condition, :spent_date, shiharaibi_from.to_s, shiharaibi_to.to_s
end
@ledgers = Ledger.joins('INNER JOIN himokus ON himokus.id = ledgers.himoku_id')
.joins('INNER JOIN payments ON payments.id = ledgers.pay_id')
.select('ledgers.*, himokus.himoku_code, himokus.himoku_name, payments.pay_name')
.where(condition)
…
# 引数のハッシュに要素を追加します def add_item(hash, key, value, date_to = nil)
if date_to == nil
…
else
if key != nil && value.to_s != ""
if !hash.key? key
# 範囲式を利用する
hash[key] = value .. date_to
logger.debug "the hash add item. key:" + key.to_s + " / value:" + hash[key].to_s
end
end
end
end
[/sourcecode]
これで、取得できるSQLは
[sourcecode language="sql"] SELECT ledgers.* … FROM "ledgers" INNER JOIN … WHERE "ledgers"."himoku_id" = 1 AND "ledgers"."pay_id" = 1 -- ここがBetween句となる AND ("ledgers"."spent_date" BETWEEN '2010-09-10' AND '2011-10-10') [/sourcecode]
のような条件句を生成したSQLになるよ。
何が素敵って、検索条件をハッシュにして指定するだけで自動的に生成してくれるわけだから素敵。 ちなみに、in句を生成する場合はハッシュの値にin句で指定したい配列をセットすればOK!
![]() 【送料無料】Ruby on Rails 3アプリケ-ションプログラミング 価格:3,675円(税込、送料別) |