Rails和sql:重写find_by_sql

时间:2011-10-13 00:43:00

标签: sql ruby-on-rails find-by-sql

我有一个Product和Creator表,我还有一个名为CreatorProduct的表,它将创建者与产品连接起来。产品可以有许多创作者,创作者可以拥有许多产品。我想要做的是找到有创作者的产品,有些产品可能没有创作者。

我已经编写了下面的代码但是如何以更友好的方式编写它?这适用于我的rails控制台,但当我把它放在我的代码中时,我得到了 未定义的方法`包括'#

Product.find_by_sql("select * from Products where id in (select product_id from Creator_Products intersect select id from Products)")

谢谢!

1 个答案:

答案 0 :(得分:0)

我可能只是使用find函数并使用类似于现在的地方:

Product.find(:all, :conditions => ["exists (select * from Creators where product_id = Products.Id)"])

否则,我想通过包含创建者信息(假设您已经设置了has_many),主动记录加入数据的方式可能会相同,然后确保创建者信息存在...

Product.find(params[:id],:include => [:Creator],:conditions => ["Creator.product_id!=null"])

如果您尚未设置关系,则需要在模型中定义:

class Product< ActiveRecord::Base
has_many :CreatorProduct
has_many :Creators, :through => :CreatorProduct