相关疑难解决方法(0)

ActiveRecord找到所有有关联孩子的父母

我不知道为什么我无法解决这个问题,我认为应该相当简单.我有两个型号(见下文).我正在尝试为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)

activerecord ruby-on-rails associations

10
推荐指数
1
解决办法
6531
查看次数

Rails 3找到没有孩子的父母

在没有计数器缓存的一对多关系中,我怎样才能找到没有孩子的父母?

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中遇到了麻烦.

ruby-on-rails

7
推荐指数
1
解决办法
1701
查看次数

如何计算具有一个或多个关联对象的记录数?

我有一个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)

join ruby-on-rails associations ruby-on-rails-3.2

7
推荐指数
1
解决办法
261
查看次数

Rails ActiveRecord WHERE EXISTS查询

我有一个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)

但这似乎不起作用,我对尝试尝试感到困惑。

mysql ruby-on-rails

2
推荐指数
2
解决办法
6493
查看次数