我正试图弄清楚如何在不使用find_by_sql
的情况下查询此关系class User < ActiveRecord::Base
has_many :lists
end
class List < ActiveRecord::Base
has_many :list_items
belongs_to :user
end
class ListItem < ActiveRecord::Base
belongs_to :list
belongs_to :item
end
class Item < ActiveRecord::Base
has_many :list_items
end
这应该是我们正在使用的但是我怎么做不是通过find_by_sql 在user.rb中
def self.find_users_who_like_by_item_id item_id
find_by_sql(["select u.* from users u, lists l, list_items li where l.list_type_id=10 and li.item_id=? and l.user_id=u.id and li.list_id=l.id", item_id])
end
我尝试了几种不同的包含/连接/合并方案,但我无法实现我想要做的事情。
THX
答案 0 :(得分:1)
要确切地告诉您在这里尝试做什么查询有点困难,但看起来您想要用户记录,其中用户具有包含特定list_type_id且包含特定项目的列表。看起来大概就是这样:
User.joins(:lists => [:list_items]).where('lists.list_type_id = ? and list_items.item_id = ?', list_type_id, item_id)
这会导致ActiveRecord执行如下查询:
SELECT "users".* FROM "users" INNER JOIN "lists" ON "lists"."user_id" = "users"."id" INNER JOIN "list_items" ON "list_items"."list_id" = "lists"."id" WHERE (lists.list_type_id = 10 and list_items.item_id = 6)
并返回生成的User对象集合。