Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 显示未读书籍列表_Sql_Ruby On Rails 3 - Fatal编程技术网

Sql 显示未读书籍列表

Sql 显示未读书籍列表,sql,ruby-on-rails-3,Sql,Ruby On Rails 3,我有一个图书模型,一个用户模型和一个阅读模型。一本书可以有很多次阅读,一个用户可以有很多次阅读。基本上,in Read是某个用户读过的所有书籍 现在我想显示某个用户所有未读书籍的列表。假设用户已登录并且存在当前的用户对象,我如何获得这样的列表 我目前有: @unread_books = Book.find(:all, include: :reads, conditions: ["books.id NOT IN (?)", current_user.read_ids]) 但是这张地图把书的id映

我有一个图书模型,一个用户模型和一个阅读模型。一本书可以有很多次阅读,一个用户可以有很多次阅读。基本上,in Read是某个用户读过的所有书籍

现在我想显示某个用户所有未读书籍的列表。假设用户已登录并且存在当前的用户对象,我如何获得这样的列表

我目前有:

@unread_books = Book.find(:all, include: :reads, conditions: ["books.id NOT IN (?)", current_user.read_ids])
但是这张地图把书的id映射到了读id。应该是这样的:

conditions: ["books.id NOT IN (?)", current_user.read_book_ids]
但这会产生一个错误:

undefined method `read_book_ids' for #<User:0x007fb21782b3f8>
未定义的方法“read\u book\u id”#
那么,如何将图书id映射到Read中的外键图书id?

使用a获取这些图书;对于当前用户id具有或没有读取的书籍。然后仅选择那些没有附加用户的书籍,这些书籍包含在外部联接(但不包含在内部联接)中。这些正是当前用户尚未阅读的书籍:

SELECT books.id, books.title FROM books
LEFT OUTER JOIN readings 
  ON readings.book_id = books.id 
  AND readings.user_id = 1
WHERE readings.user_id IS NULL

在Rails中,可能是这样(未经测试):

您的方法的问题在于,您可能传递了一个非常大的ID数组以供忽略。必须搜索每个条目的id,这是非常低效的;对于当前用户id具有或没有读取的书籍。然后仅选择那些没有附加用户的书籍,这些书籍包含在外部联接(但不包含在内部联接)中。这些正是当前用户尚未阅读的书籍:

SELECT books.id, books.title FROM books
LEFT OUTER JOIN readings 
  ON readings.book_id = books.id 
  AND readings.user_id = 1
WHERE readings.user_id IS NULL

在Rails中,可能是这样(未经测试):

您的方法的问题在于,您可能传递了一个非常大的ID数组以供忽略。必须搜索每个条目的id,这是非常低效的