我不知道为什么我无法解决这个问题,我认为应该相当简单.我有两个型号(见下文).我正在尝试为SupplierCategory提出一个命名范围,该范围将找到所有SupplierCategory(s)(包括:供应商),其关联的供应商不是空的.
我尝试了一个直接加入,named_scope :with_suppliers, :joins => :suppliers它只给了我与供应商的类别,但它给了我每个类别单独列出,所以如果一个类别有2个供应商,我在返回的数组中获得两次类别:
目前我正在使用:
named_scope :with_suppliers, :include => :suppliers
Run Code Online (Sandbox Code Playgroud)
然后在我看来我正在使用:
<%= render :partial => 'category', :collection => @categories.find_all{|c| !c.suppliers.empty? } %>
Run Code Online (Sandbox Code Playgroud)
不完全雄辩,但说明了我想要实现的目标.
类定义
class SupplierCategory < AR
has_many :suppliers, :order => "name"
end
class Supplier < AR
belongs_to :supplier
end
Run Code Online (Sandbox Code Playgroud) 在没有计数器缓存的一对多关系中,我怎样才能找到没有孩子的父母?
user.rb
has_many :pages
Run Code Online (Sandbox Code Playgroud)
page.rb
belongs_to :user
Run Code Online (Sandbox Code Playgroud)
我试过了
User.includes(:pages).where("pages.user_id is NULL")
Run Code Online (Sandbox Code Playgroud)
这在MySQL中遇到了麻烦.
我有一个Property模特has_many :photos。我想计算properties一张或多张照片的数量。
我怎么做?
我尝试了简单的方法:
> Property.where('properties.photos.count > ?', 0).count
(3.1ms) SELECT COUNT(*) FROM "properties" WHERE (properties.photos.count > 1)
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "photos"
LINE 1: SELECT COUNT(*) FROM "properties" WHERE (properties.photos....
^
: SELECT COUNT(*) FROM "properties" WHERE (properties.photos.count > 0)
from /ruby-2.3.0@myproject/gems/activerecord-3.2.22.5/lib/active_record/connection_adapters/postgresql_adapter.rb:1163:in `async_exec'
Caused by PG::UndefinedTable: ERROR: missing FROM-clause entry for table "photos"
LINE 1: SELECT COUNT(*) FROM "properties" WHERE (properties.photos....
Run Code Online (Sandbox Code Playgroud)
至:
> Property.joins(:photos).where('photos.count > ?', 0).count
(3.7ms) SELECT …Run Code Online (Sandbox Code Playgroud) 我有一个SQL查询,该查询返回了我需要的内容,但是我无法以“ Rails方式”将其转换为活动记录查询。
我的SQL查询是:
SELECT * from trips
WHERE trips.title LIKE "%Thailand%"
AND EXISTS (SELECT * from places WHERE places.trip_id = trips.id AND places.name LIKE "%Bangkok%")
AND EXISTS (SELECT * from places WHERE places.trip_id = trips.id AND places.name LIKE "%Phuket%")
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Rails这样的事情:
@trips=Trip.where("trips.title LIKE ?", "%Thailand%")
@trips=@trips.includes(:places).where(("places.name LIKE ?","%Bangkok%").exists?) => true, ("places.name LIKE ?","%Phuket%").exists?) => true)
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用,我对尝试尝试感到困惑。