きにきじ」:今日の気になる記事をきまぐれにご紹介

Railsのfindで複数のテーブルから検索する:includeでeager loading

Posted at 01:21 on September 22, 2010

Last updated at 01:28 on October 12, 2011

Category: Non-News, Note

Tags: , , , ,


Ruby on Rails でデータベースから検索を行う場合、通常は Model.find メソッドを使いますが、複数のテーブルを組み合わせて検索する方法をメモしておきます。

今回考えるのは、people(人)と entries(ブログの記事)という2つのテーブルがあり、people テーブルの要素 age(年齢)と entries テーブルの要素 created_at(投稿日時)の2条件で絞るという場合です。例えば「現時点で20歳未満の未成年が2010年4月1日以降に投稿したブログ記事を検索する」みたいな。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# people      entries
+----+-----+  +----+-----------+---------------------+
| id | age |  | id | person_id | created_at          |
+----+-----+  +----+-----------+---------------------+
|  1 |  24 |  |  1 |         1 | 2010-07-01 10:11:12 |
|  2 |  18 |  |  2 |         2 | 2010-01-01 10:11:12 |
|  3 |  48 |  |  3 |         3 | 2010-09-01 10:11:12 |
|  4 |  17 |  |  4 |         4 | 2010-06-01 10:11:12 |
|  5 |  20 |  |  5 |         5 | 2010-03-01 10:11:12 |
|  6 |  23 |  |  6 |         6 | 2010-08-01 10:11:12 |
|  7 |  19 |  |  7 |         7 | 2010-09-01 10:11:12 |
|  8 |  29 |  |  8 |         8 | 2010-02-01 10:11:12 |
|  9 |  31 |  |  9 |         9 | 2010-04-01 10:11:12 |
| 10 |  22 |  | 10 |        10 | 2010-05-01 10:11:12 |
+----+-----+  +----+-----------+---------------------+
# a person has many entries

本物のアウトプットはこんな風にはなりませんがご愛嬌ということでご勘弁を。

Ruby1.8.7以降ではtruncateメソッドの仕様が変わったらしくエラーが起きる

Posted at 00:24 on August 27, 2010

Last updated at 22:54 on September 16, 2010

Category: Non-News, Note

Tags: , , , ,


基礎Ruby on Rails』を手にウェブアプリケーション "Morning Glory" を作成していたわけですが、第6章のデータを MySQL にインポートしたら以下のようなエラーが生じてしまいました。

1
2
NoMethodError in Main#index
undefined method `length' for #<enumerable::enumerator:0xb676c440></enumerable::enumerator:0xb676c440>

問題の「Main#index」ってのは以下の RHTML ファイルです。どうやらこれの8行目にある truncate メソッドが引っかかっているご様子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
< % @side_bar_template_name = 'side_bar' -%>
<div id="whats_new">
<h2>What's New</h2>
<ul>
< % @new_articles.each do |a| -%>
  <li>< %= link_to h(a.heading), :action => a.place,
            :anchor => "article_#{a.id}" %> 
      < %= truncate(h(a.body), 20) %></li>
< % end -%>
</ul>
</div>
<div id="main">
< % @top_articles.each do |a| %>
  <h2>< %= h(a.heading) %></h2>
  < %= simple_format(h(a.body)) %>
< % end -%>
</div>

結論から言うと、これは Ruby のバージョンというか仕様に対してもともとのコードが噛み合ってないのが原因のようです。解決策は以下のとおり。

Railsで次のエラーへの対処法:We’re sorry, but something went wrong.

Posted at 02:00 on August 4, 2010

Last updated at 23:13 on September 16, 2010

Category: Non-News, Note

Tags: , , , ,


※ 追記あり

Ruby on Rails で楽しくウェブアプリを作ろうとコントローラを以下のように作成して http://localhost:3000/main/index/ にアクセスを試みたのですが、エラーに遭遇したのでその対処法メモです。

1
ruby script\generate controller main

アクセスすると、まだビューを作成していないので本来なら「Template is missing」と表示されるはずなのに、表示されるのは以下のメッセージ。「something went wrong」と言われても困ります。僕のほうこそそこを知りたいw

We’re sorry, but something went wrong.

We’ve been notified about this issue and we’ll take a look at it shortly.

RailsのWEBrickサーバを強制的に停止する方法

Posted at 00:28 on August 4, 2010

Last updated at 23:15 on September 16, 2010

Category: Non-News, Note

Tags: , , , ,


Ruby on Rails で WEBrick サーバを起動したはいいものの停止できなくなってしまった場合の対処法です。


Copyright © 2008-2012 鍵山琢実 (KAGIYAMA, Takumi). All rights reserved.

This site's design was checked by IE 6.0+, Firefox 3.5+, GChrome 2.0+, Safari 4.0+, Opera 10.0+, and Sleipnir 2.8+ (all for Windows).
And JavaScript is used for some details. I am so sorry if your browser is not supported.

正当なCSSです! 私はチーム・マイナス6%です

↓ Today's My Favorite Phrase ↓

「きさま──いったい何人の命をその傷のために吸い取った!?」
「おまえは今まで食ったパンの枚数をおぼえているのか?」

From: 荒木飛呂彦 『ジョジョの奇妙な冒険』第3巻 p. 149