【发布时间】:2015-03-24 02:42:16
【问题描述】:
我正在创建一个 RESTful API 端点以向给定用户返回一组公共和私有的位置。我有一个名为Location 的模型,它有一个owner_id 和一个location_type 字段。 owner_id 将Location 链接到拥有它的用户,location_type 定义可以是联系人、企业或品牌的位置类型。企业或品牌类型的位置对所有用户可见,而联系人仅对拥有它们的用户可见。目前我使用以下代码来检索给定用户的所有位置:
@locations = Location.where("location_type IN ('business', 'brand') OR
(location_type = 'contact' AND owner_id = ?)", params[:id])
.order(created_at: :desc)
此代码按预期执行,返回该用户的所有公共位置(企业或品牌)和所有私人位置(该用户拥有的联系人)。
当我从Location 模型中删除owner_id 并创建一个单独的模型LocationOwner 时,问题就出现了。 LocationOwner belongs_to Location 并通过 has_many 关联进行连接。这样做是为了在与其他用户共享联系人时,每个联系人类型的位置都可以添加其他所有者。
如何修改上面的代码来查询business和brand类型的所有位置,以及contact类型的所有位置LocationOwner等于@提供的用户ID 987654339@?这可以在一个查询中完成吗?我现在要查询两个不同的表,我是否必须使用两个查询,还是 has_many 关联处理它?
【问题讨论】:
标签: ruby-on-rails ruby activerecord associations has-many