0

我想问,从给定的书架上选择书籍的正确方法是什么

class Book < ActiveRecord::Base
    belongs_to :shelf
end

class Shelf < ActiveRecord::Base
    has_many :books
end

使用Book.where(:shelf => shelf)会引发异常,例如no such column: book.shelf. 我知道我可以反转它,shelf.books但是如果需要过滤多个对象,这将不起作用。我所能找到的只是查询应该看起来像Books.where(:shelf_id => shelf.id),但这似乎不是很干,甚至有点酷..

4

2 回答 2

1

您可以使用连接或包含:

Book.joins(:shelfs) # will load all the Books that have one Shelf

Book.includes(:shelfs) # will load all the Books and Shelfs even if the book has no Shelf associated

# or beginning with a Shelf object:
@shelf.books # will return all Book where shelf_id = @shelf.id

如果您需要精确度/有疑问,请随时发表评论;)(我在想您的短语“就像shelf.books,但如果需要过滤多个对象,这将不起作用。”我不是很明白)

于 2012-11-19T22:13:20.433 回答
0

对于关系枯燥,请看一下委托,其中从一个模型到另一个模型的引用被封装在其中一个模型中。关于这是否是解决实际问题的方法有很多讨论,我个人认为可以,但请自行决定。文章很旧,但没有过时。

于 2012-11-19T22:18:07.617 回答