0

分散ライブラリ システム用の 3 つのテーブル:

Class Book       # model: id, name, auhtor
  has_many :book_belongs
  has_many :owners, through: :book_belongs, source: :user

Class User       # model: id, name, email, facebook_uid, facebook_friends
  has_many :book_belongs
  has_many :ownedbooks, through: :book_belongs, source: :book

Class BookBelong # model: user_id, book_id
  belongs_to :user
  belongs_to :book

@user.facebookfriends は、ユーザーの Facebook 友達の facebook_id と facebook_name を含む (シリアル化された) ハッシュです。

次のような ruby​​/rails のアクティブ レコード クエリの設計に問題があります。

  • Facebook の友達が所有する本を返します。

「英語」では、クエリは本の所有者の facebook_id を調べ、ユーザーの facebook_friends ハッシュと一致する必要があります。

  • これをよりシンプルにし、計算コストを削減するために、テーブル/データ モデルを設計するより良い方法はありますか?
4

1 に答える 1

0

OK - 解決済み、使用

BookBelong.joins(:book).joins(:user).where('users.uid' => current_user.friends.keys) 

シンプルな方法を使用して、ビューで実際の本を取得します

  <% @friends_books.each do |book| %>
    <td><%= book.book.name %></td>

ただし、超効率的ではないようです。

于 2012-11-28T03:07:09.457 に答える