Rails3.0のscope(2系で言うnamed_scope)を使ったお手軽検索。モデルにextendして使う。やってることは渡されたパラメータのkeyのscopeを呼び出して、それらを全部チェインさせるだけ。お手軽だけど、scopeを定義するだけなので結構融通が効くし便利。
Rails3.0のscope(2系で言うnamed_scope)を使ったお手軽検索。モデルにextendして使う。やってることは渡されたパラメータのkeyのscopeを呼び出して、それらを全部チェインさせるだけ。お手軽だけど、scopeを定義するだけなので結構融通が効くし便利。
ActiveRecordを使ったRailsアプリは,デフォルトでデータベースへの接続をプールするようになっています. ActiveRecordユーザとしては待ちわびたぜ!的な機能らしいのですが,設定等でこれをdisableすることが出来ず,LVS+keepalivedを介する場合にはロードバランシングが最初の接続時にしか為されずがなかなか厄介です. 対策として思いついたのは プールした接続を早い周期で捨てる LVS+keepalivedではなく,MySQL Proxyでバランシングする(Proxyへの接続はプール) そもそも接続をプールさせない くらいでした. どうするのがセオリーなのかと調べてみると コネクションプーリングの話 - naoyaのはてなダイアリー 2006-09-03 など4年近く前に議論されていて,"あー,高速道路あるなあ"と,コネクション確立のコストを調べる前に「プール
はじめに Ruby on Railsの2年半ぶりのメジャーバージョンアップである3.0の正式リリースがいよいよ間近に迫ってきました。 Rails 3は、アプリケーション・レベルではRails 2.3との互換性をなるべく保ちながらも、メジャーバージョンアップだけあってフレームワーク自体は隅々にまで徹底的なリファクタリングが施されて更なる洗練を遂げています。結果として、Rails 3では融通の効かないフルスタック構造を捨ててすっきりとしたモジュール独立性が実現されているのですが、この際に、Merbとの合併の影響もあってか、いくつかの新たな外部ライブラリに依存する形になっているのも興味深いところです。 そこで本稿では、あえてRails 3そのものではなく、このRails 3の大改造の舞台裏を支える裏方さんにスポットライトを当ててみたいと思います。 Arelによってパラダイムが大きく変わったAct
動的に増減する接続先が大量にある場合 ActiveRecordで接続先を使い分ける場合は、ActiveRecord::Baseクラスを継承して、connection_establishを個別に呼び出してやる手法が載ってますが、どんな接続先がくるかもわからない+その接続先が大量にある場合どうすりゃいいのってことでAPIマニュアルを見てたんですが・・・ remove_connection ってメソッドが使えそうだなと思って establish_connectionと交互にやればできるんじゃないかと思ったんだが・・・なんかできない。 なんだかestablish_connectionは1回しかできないっぽ・・・という結論に達して思案 ▲ ▼ 接続先の数だけクラス製造 Ruby/クラス/無名クラスを作るのテクニックを使って、じゃんじゃん作って対処w require "rubygems" requ
2010年06月25日00:18 Ruby ActiveRecordのソースコードを読む ハマったのがきっかけで ActiveRecord 2.3.5 のソースコードを少し読んだので簡単にまとめてみます。なお、ActiveRecord では 2.2 からコネクションプーリングが導入されています。 コネクションプーリングとは? データベースにアクセスする時、アクセスのたびに接続(コネクション)を確立するのではなく、あらかじめ一定数のコネクションを確立しておき、それを使い回す手法。データベースアクセスの負荷を減らすために用いられる。 それを踏まえつつ、検索をする場合の処理を追っていきます。例えば Hoge.find(:all, ...) とかしたらどうなるんでしょうか。 あ、その前に ActiveRecord 使うときって establish_connection が必ず呼ばれます。Rails
ActiveRecordについて調べる必要があったのでまとめました。 調べたソースコードは activerecord-2.3.5 です。 どっか間違えていたら教えてもらえると助かります。>< ActiveRecord::Base#findから ActiveRecordから派生したクラスを使い、下記のようなコードで呼び出す。 Person.find(:all, :conditions => [ "category IN (?)", categories], :limit => 50) Person.find(:all, :conditions => { :friends => ["Bob", "Steve", "Fred"] } findのコードはどうなっているかというと、 def find(*args) options = args.extract_options! validate_fi
来年も作りたい!ふきのとう料理を満喫した 2024年春の記録 春は自炊が楽しい季節 1年の中で最も自炊が楽しい季節は春だと思う。スーパーの棚にやわらかな色合いの野菜が並ぶと自然とこころが弾む。 中でもときめくのは山菜だ。早いと2月下旬ごろから並び始めるそれは、タラの芽、ふきのとうと続き、桜の頃にはうるい、ウド、こ…
Posted on 2009年5月20日 Posted by ちゅう コメントする Posted in Development Tags: Rails Rails の ActiveRecord で、save! とかすると保存に失敗したとき例外を投げてくれる。例えば、User.create!(params[:user]) とかして、失敗すると、ActiveRecord::RecordInvalid を投げてくれるのだけど、エラーをどうやって取るのか調べたのでメモ。 よくある例で、ユーザが作れたら index へ遷移して、作れなかったら new で再入力させるという場合。 createを使う場合 def create if @user = User.create(params[:user]) flash[:notice] = 'ユーザ作成しました' redirect_to action: :i
メモ代わり。 ActiveRecord require 'rubygems' require 'active_record' ActiveRecord::Base.establish_connection( :adapter => 'postgresql', :host => 'localhost', :username => 'foo', :database => 'baz', :encoding => 'utf8' ) class User < ActiveRecord::Base end User.find(:all).each do |u| p u end Migrate Rakefile ほんとは設定ファイルわけたほうがいいんだけどね require 'rubygems' require 'active_record' require 'logger' ActiveRecord:
Railsの本*1を読んでいて、ActiveRecordの機能の豊富さにだんだんついていけなくなったので練習のために、単独で使ってみる。まず以下のようなテーブルをMySQLに構築 CREATE TABLE customers ( id int not null auto_increment, name varchar(100), address varchar(100), PRIMARY KEY (id) ); できあがったら以下のプログラムを書いて実行してみる。 require "rubygems" require_gem "activerecord" ActiveRecord::Base.establish_connection(:adapter=>"mysql",:host=>"localhost",:user=>"root",:password=>"*****",:database
去年Twitterで教えてもらったActiveRecord::Extensions。すごく良いです。 日本語で書かれた記事が見つからなかったので、書いてみます。 ActiveRecord::Extensionsは文字通り、ActiveRecordの拡張です。わりと便利な機能がたくさんあるのでmysql使っている人は入れても損は無いと思う。postgresqlは未対応です。 インストール gem install ar-extensions もしくは script/plugin install http://arext.rubyforge.org/svn/tags/ar-extensions-0.7.0 gemとpluginどちらも用意されてるのが嬉しい。 あとはenvironment.rbとかにrequire 'ar-extensions'しとく。 (注:ar-extensions-0.7.
1.conditions句をシンボル使ってDRYに書くconditions句って実はシンボル使えるらしいのです。最近まで知りませんでした。というわけで、?だと:conditions =>["(prefecture_id = ? and user_id = ?) or (other_prefecture_id = ? and other_user_id = ?)", 11, 2, 11, 2] と、分けわかんなくなっちゃう様な検索文を:conditions =>["(prefecture_id = :prefecture_id and user_id = :user_id) or (other_prefecture_id = :prefecture_id and other_user_id = :user_id)", {:prefecture_id => 11, :user_id =
WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。 皆さんご存知のとおり、 Rails をはじめとする多くの Web アプリケーションフレームワークは、リクエストベースで設計されています。つまり、すべての処理は HTTP リクエストごとに起動され、それにレスポンスを返すことで終了します。ほとんどの場合、これは非常にうまく機能しますが、タイムアウトが発生してしまうような時間のかかる処理、一定間隔で定期的に起動したい処
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く