#sql #ruby-on-rails #find-by-sql
#sql #ruby-on-rails #поиск по sql
Вопрос:
У меня есть таблица Product и Creator, у меня также есть таблица под названием CreatorProduct, которая объединяет создателя с продуктом. У продукта может быть много создателей, а у создателя может быть много продуктов. Что я хочу сделать, так это найти продукты, у которых есть создатели, у некоторых продуктов может и не быть создателей.
Я написал приведенный ниже код, но как мне написать его более удобным для rails способом? Это работает для моей консоли в rails, но когда я помещаю это в свой код, я получаю неопределенный метод `includes’ для #
Product.find_by_sql("select * from Products where id in (select product_id from Creator_Products intersect select id from Products)")
Спасибо!
Ответ №1:
Я бы, вероятно, просто использовал функцию find и использовал аналогичное where тому, что у вас есть сейчас:
Product.find(:all, :conditions => ["exists (select * from Creators where product_id = Products.Id)"])
В противном случае, я думаю, что с помощью способа, которым active record объединяет данные, вы, вероятно, могли бы получить то же самое, включив информацию о создателе (при условии, что у вас настроен 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