2011-10-13 79 views
1

我有一個Product和Creator表,我也有一個名爲CreatorProduct的表,它將創建者與產品結合在一起。產品可以有許多創造者,創造者可以有許多產品。我想要做的是找到有創作者的產品,有些產品可能沒有創作者。Rails和sql:重寫find_by_sql

我已經編寫了下面的代碼,但是如何以更友好的方式編寫它?這適用於我在Rails控制檯,但是當我把它放在我的代碼,我得到 未定義的方法'包括爲#

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

謝謝!

回答

0

我可能只是使用查找功能,並使用類似哪裏你現在擁有的一切:

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"])

如果沒有relati onships設置已經你需要在你的模型來定義,那麼:

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