2011-03-03 39 views
0

我舉一個例子所有項目:獲取的一些其他物品

Books.find(THIS_FIND_MAY_GET_MORE_THAN_ONE_BOOK).pages.all 

我期待一組頁......每個頁面返回的值應該被包含在至少一本書。否則它不應該在集合中。我怎樣才能得到這樣的一套?

我的直覺是循環遍歷書籍,然後每一次添加,但我想可能有一個更快的方式(數據庫),因爲我對這些書不感興趣。我不想進一步介紹數據庫鏈接,因爲我認爲它們可能導致數據庫不一致。

有什麼建議嗎?謝謝!

回答

2

要獲取所有頁面的每本圖書的...

books=Books.find(:all) 

...會給你的書的數組。然後你可以遍歷每本書來獲得它的網頁...

books.each do |book| 
    puts book.pages 
end 

這裏假設你已經安裝的書籍和網頁之間的關係,其中每本書有很多頁,每頁屬於一本書。

+0

如果這是您想要的,請記住在您的find中包含:pages模型以急切加載關聯並避免額外的數據庫請求。 – Spyros 2011-03-03 01:41:30

+0

這將給予預期的結果(我信任),但我希望有一個更好的解決方案。想象一下,我需要一些房間的書...然後我需要兩個循環。但我想這比SpyrosP提出的「反向」方法更快。感謝您的回答 – user562529 2011-03-03 01:56:08

+0

如果您需要某些房間的書籍,您可以獲得rooms.books。如果事情開始變得與協會有點混亂,使用和合並範圍可能是一個好主意。 – Spyros 2011-03-03 02:02:48

0

我並不確定你真正想做什麼,但是既然你想要頁面而不是書本,爲什麼不使用Page.find_by_book_id或者其他任何你想要的,並且傳遞一個數組和書本id。

如果這不是您真正想要的,請您提供一些關於您想實現的更多信息?也許範圍可以爲你工作,也許你可以寫更多的信息,以便我可以進一步幫助你。

+0

感謝您的幫助在這裏和上面。我將閱讀關於示波器的內容,或許他們將在未來有用。與此同時,我會將另一個答案標記爲「答案」;) – user562529 2011-03-03 05:00:16

-1

我想這是你想要什麼:

pages = Page.where("book_id is not NULL")