1

postgres と SEQUEL と ruby​​ を使用した単純な結合クエリに苦労しています。

列を持つテーブル1(ショートリスト)があります:id、shortname

列を持つテーブル 2 (ショートメンバー): id、short_id (ショートリストの ID への参照)

shortmembers id と shortlists shortname を選択したい。したがって、通常の SQL では、次のようになります。

SELECT shortlists.shortname, shortmembers.id WHERE shortmembers.short_id = shortlists.id

私が試してみました

@shortmembers = DB[:shortlists].join(:shortmembers, :id => :short_id) 

そしてルビーコード:

<option value="">Populated Shortlists ..</option>
        <% @shortmembers.each do |shortmember| %>
        <option value="<%= shortmember[:id] %>"><%= shortmember[:shortname] %></option>
        <% end %>

結合クエリが機能していないと思われるエラー メッセージが表示されます。それは:

nil:NilClass の未定義メソッド「each」

すべての助けに感謝します!

4

2 に答える 2

1

私はそれを理解しました。正しいクエリは次のとおりです。

@shortmembers = DB[:shortlists].distinct(:shortname).join(:shortmembers, :short_id => :id)

観察として、ついでに、distinct が重要です。そうしないと、"shortname" の各例が繰り返されます。

問題はクエリの構成ではなく、shortlists テーブルの「id」列が整数型であり、shortmembers テーブルの対応する short_id 列が varchar 型であったことです。Postgres はこれに腹を立てました。short_id を「int」型に変更しても問題ありません。

これが他の誰かに役立つことを願っています。

于 2013-05-29T00:23:20.897 に答える