рельсы: включить оператор с двумя условиями ON - PullRequest
0 голосов
/ 03 мая 2010

У меня есть дерево таблиц

  • книга
  • закладки
  • Пользователи

где существует связь между книгами и пользователями через закладки.

Я ищу запрос, где я получаю все книги определенного пользователя, включая закладки. Если там нет закладок, должен быть включен ноль ...

мой SQL-запрос выглядит так:

SELECT * FROM `books` 
LEFT OUTER JOIN `bookmarks ` 
ON bookmarks.book_id = books.id 
AND bookmarks.user_id = ?

В рельсах я знаю только оператор: include, но как мне добавить второй bookmarks.user_id =? заявление в разделе ON этого запроса? если я добавлю это в: условие, никакие нулевые результаты не будут возвращены!

Спасибо! Markus

1 Ответ

0 голосов
/ 03 мая 2010

Добавьте следующие ассоциации в ваши модели:

class Book < ActiveRecord::Base
  has_many :bookmarks
  has_many :users, :through => :bookmarks
end

# assuming bookmarks table has book_id and user_id columns.
class Bookmark < ActiveRecord::Base
  belongs_to :book
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :bookmarks
  has_many :books, :through => :bookmarks
end

Теперь вы можете совершать следующие звонки:

u.books  # books for a user
u.bookmarks   # bookmarks for a user

# find the user and eager load books and bookmarks
User.find(params[:id], :include => [:books, :bookmarks])


b.users  # users for a book
b.bookmarks   # bookmarks for a book

# find the book and eager load users and bookmarks
Book.find(params[:id], :include => [:users, :bookmarks])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...