Rails и sql: переписывание find_by_sql - PullRequest
1 голос
/ 13 октября 2011

У меня есть таблица Product и Creator, у меня также есть таблица CreatorProduct, которая соединяет создателя с продуктом.Продукт может иметь много создателей, а создатель может иметь много продуктов.Я хочу найти продукты, у которых есть создатели, а некоторые продукты могут не иметь создателей.

Я написал код ниже, но как мне написать его более дружелюбным способом?Это работает для моей консоли в rails, но когда я помещаю ее в свой код, я получаю неопределенный метод `includes 'для #

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

Спасибо!

1 Ответ

0 голосов
/ 21 ноября 2011

Я бы, вероятно, просто использовал бы функцию поиска и использовал бы то же, что и у вас сейчас:

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
...