Ruby 如何检查模型在Rails中是否存在模型关联?
我有两个关联的ActiveRecord模型(Book、Ad)。在我的查询中,我想获取有1个或多个广告的书籍。最好的方法是什么Ruby 如何检查模型在Rails中是否存在模型关联?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我有两个关联的ActiveRecord模型(Book、Ad)。在我的查询中,我想获取有1个或多个广告的书籍。最好的方法是什么 # in controller: @books = Book.where(book has got 1 or more ads).last(20) # Book model: class Book < ActiveRecord::Base has_many :ads, :dependent => :destroy ... end # Ad mo
# in controller:
@books = Book.where(book has got 1 or more ads).last(20)
# Book model:
class Book < ActiveRecord::Base
has_many :ads, :dependent => :destroy
...
end
# Ad model:
class Ad < ActiveRecord::Base
belongs_to :book
...
end
控制器中的#
@书=书。在哪里(书有一个或多个广告)。最后(20)
#图书型号:
类目:destroy
...
结束
#广告模式:
类Ad
一个选项是使用连接
:
Book.joins(:ads)
joins
允许您在一个查询中完成所有这一切,这将为您提供所有设置了Ad
上的book\u id
的book
因此,对于控制器,您需要:
@books=Book.joins(:ads)。最后(20)
一个选项是使用joins
:
Book.joins(:ads)
joins
允许您在一个查询中完成所有这一切,这将为您提供所有设置了Ad
上的book\u id
的book
因此,对于控制器,您需要:
@books=Book.joins(:ads).在控制器中的最后(20)
subquery = Ad.select("book_id").group(:book_id).having("COUNT(*) >= 1").to_sql
@books = Book.where("id IN (#{subquery})").last(20)
在控制器中
subquery = Ad.select("book_id").group(:book_id).having("COUNT(*) >= 1").to_sql
@books = Book.where("id IN (#{subquery})").last(20)
另一个简单的解决办法是
Ad.all.map{|ad| ad.book}.uniq.last(20)
这将返回
数组中最后20个唯一的图书
,因为如果广告
存在,那么它就有一本图书
,因此该图书有一个或多个广告另一个简单的解决方案是
Ad.all.map{|ad| ad.book}.uniq.last(20)
这将返回数组中最后20个唯一的书籍
,因为如果广告
存在,则它有一本书籍
,因此该书籍有一个或多个广告没有问题。如果这有帮助,请单击答案旁边的绿色复选标记关闭此问题。没问题。如果这有帮助,请单击答案旁边的绿色复选标记以结束此问题。只需简短的旁注,您不需要像那样分隔子查询。您可以简单地执行Book.where(id=>Ad.select(“Book\u id”).group(:Book\u id)。having(“COUNT(*)>=1”)
,子查询将以相同的方式在where
子句中执行。只需简单的旁注,您不需要像那样分隔子查询。您只需执行Book.where(id=>Ad.select(“Book\u id”).group(:Book\u id)。having(“COUNT(*)>=1”)
,子查询将以相同的方式在where
子句中执行。