Kouhei Sutou
kou****@clear*****
2014年 3月 6日 (木) 16:25:47 JST
須藤です。 In <df3c5906-a457-3d3f-8f9a-c02e5c273b65 @ api104> "[groonga-dev,02170] rroonga4.0.0のrecord.key" on Thu, 06 Mar 2014 16:03:30 +0900, "Endo Akira" <endo4****@goo*****> wrote: > 昨日rroongaを使っている検索サーバーがクラッシュした、との連絡を受け、 > 今日復旧に行ってきました。rroonga1.2.0を使って作ったrailsアプリですが、 > gemを探しても1.2.0は見つからず、4.0.0をいれて走らせましたがエラーが > 出てしまいます。エラーは、undefined method 'key' for nil:Nilclassという > 感じのもの。record.key.keyという熟語を使った部分です。 > とりあえず、record.attributesを見て、record._keyで何が出てくるか見たら > 使えそうだったので、record.key.keyの代わりにrecord._keyと直して、今日の > ところはごまかしてきましたが、帰宅してtutorialを見たら、record["_key"]と > いうのが出ていました。 たぶん、sortした結果にアクセスしているところですよね。 Rroonga 2.1.0での非互換な変更なんですが、sortした結果をRuby のArrayではなくGroongaのGroonga::Arrayで返すようにしたのです。 record._keyとrecord["_key"]の違いですが、どちらも動きは同じ ですが、record["_key"]の方が少し効率がよいはずです。 "key"ではなく、"_key"というように最初に"_"をつけると参照先の テーブルを勝手にどんどん辿っていってくれるのはRroonga固有の 機能ではなく、Groongaの機能です。Groongaのselectコマンドでも --output_columns _keyとしたときもどんどん辿っていっています。 で、特に途中のテーブルに処理結果に興味がない場合は.key.keyと いうように辿らないで_keyに任せちゃうのは正しい使い方です! 1.2.0は2011-04-01リリースなので、3年くらい前のリリースですね。 当時から元気に動いていたようでよかったです。今回はクラッシュ してしまったということですが。。。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) Groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html