標記のとおり。遅まきながら,ですが。
普段,NetBeansのRailsモードで開発してたんですが,Rinariなる凄く便利なelispができたようなので,試すついでに色々設定してみました。emacsは23.1.1です。パッケージで言うとemacs23、と明示的に指定します。単純に23のほうが日本語フォントの設定がしやすいからです。。
インストールと設定
一部,emacsとRinariで快適Rails開発! と言う素晴らしい記事を激しくコピペしつつ,以下の手順です。
標記のとおり。遅まきながら,ですが。
普段,NetBeansのRailsモードで開発してたんですが,Rinariなる凄く便利なelispができたようなので,試すついでに色々設定してみました。emacsは23.1.1です。パッケージで言うとemacs23、と明示的に指定します。単純に23のほうが日本語フォントの設定がしやすいからです。。
一部,emacsとRinariで快適Rails開発! と言う素晴らしい記事を激しくコピペしつつ,以下の手順です。
以下のようなモデルがあります(適当に考えたんですが、SNS的な何かを想定してみましょう)。
1 2 3 4 5 6 7 8 9 10 11 12 | class Post < ActiveRecord::Base belongs_to :member end class Member < ActiveRecord::Base belongs_to :job has_many :posts end class Job < ActiveRecord::Base has_many :members end |
「日付が2010年2月6日で、かつ書いた人の職業名が”Engineer”の人の日記一覧を抽出したい」んですけど、どうしましょう。なお、date属性はPostクラスに、job_name属性はJobクラスにくっついています。
なので、以下では全然ダメです。
1 2 3 4 5 6 | Post.find(:all, :conditions => { :date => Date.new(2010, 2, 6), :job_name => "Engineer" }, :include => {:member => :job}) |
SQL (0.2ms) SET NAMES 'utf8'
SQL (0.6ms) SET SQL_AUTO_IS_NULL=0
Post Load (0.0ms) Mysql::Error: Unknown column 'posts.job_name' in 'where clause': SELECT * FROM `posts` WHERE (`posts`.`date` = '2010-01-31' AND `posts`.`job_name` = 'Engineer')
最近Ruby on Railsばかりなので、今回もRailsのお話。
何も考えずに特定のIDのレコードを見つける際は、「ActiveRecord::Base#find」という超基本メソッドを使うけれど、同時に、XXXというフィールドに対して「ActiveRecord::Base#find_by_XXX」なるメソッドも定義されているので、「ActiveRecord::Base#find_by_id」でも同じようにidに紐付けて見つけ出せる。
以上は当たり前の話だが、この同じような2つ、重要なところが違う。すなわち、そのIDに紐付くレコードが存在しない場合。
「ActiveRecord::Base#find」は例外が生じる。
1 2 3 4 5 6 7 | Post.find(1) #=> ActiveRecord::RecordNotFound: Couldn't find Post with ID=1 # from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1586:in `find_one' # from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1569:in `find_from_ids' # from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:616:in `find' # from (irb):6 # from :0 |
「ActiveRecord::Base#find_by_id」は nil を返す。
1 2 | Post.find_by_id(1) #=> nil |
このお話はそれなりに有名なようですが、find_by_idを使えば、例えばこういうコードが書けて気分がいいですね。
You are currently browsing the archives for the Ruby on Rails category.
Arclite theme by digitalnature | powered by WordPress